偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 7284|回复: 19

新手注意-几个容易引起困惑的变量问题!

  [复制链接]
ou99孽缘 title=
发表于 2010-12-16 18:11:25
变量这个玩意吧,说简单也简单,但是说复杂时有的时候比J还复杂。
因为,只会用T的人大部分是因为没有编程基础,所以T中某些局限对他们来说完全是莫名其妙!

这一课的首先,我来说一个点变量的问题!

Q1:点变量,又是点变量!不就是排泄吗?
    看到这里,你觉得我又想讲排泄了是吧?恭喜你答错了!
    嘛,不得不说,不掌握点变量排泄的话,你根本不能称作会玩WE
    但是,
       Tip1-1:点变量的问题,不仅仅是排泄!
                我要讲的是,一个在制作位移技能时出现的问题。
                过分的是,这个问题不见得你会遇到,但是一旦遇到很可能让你起初完全摸不着头脑!
                曾经给一位朋友解释了很久这个问题......
                那就是,设置点A=点B这句语句!
                请看这段语句

1.jpg

猜猜看,萝莉控能够成功地来到小萝莉的旁边么?
                答案是否定的。萝莉控会原地不动
                如果这么写

2.jpg

萝莉控会跑到大叔的旁边!
                如果是编程者应该已经知道了,这是所谓的按地址传递。
                设置点B=点A这句语句,实际上是把点B直接“指向”点A
                随后,对点A进行的移动和清除操作,对点B都会同样生效!
                打个简单的比方,你可以把点变量当做一个门牌而已!
                “设置点变量”这句语句,就是一个挂门牌的动作。
                如果是【设置点变量=一个真实存在的点(比如某个单位的位置啦,某个区域的中心点啦)】这样的句子,就是相当于把现在的这个人抓住,关进房子里。
                然后在门口挂上一个牌~
                比如诱拐了一个萝莉,在门口挂上一个牌子A(设置a=萝莉的位置)
                如果是【设置点变量=另一个点变量】,只是相当于在那间房子上挂上另一个牌子!
                比如在上面那间房子门口再挂上一个牌子B(设置b=a)
                而对点的移动和清除操作,是直接对房子里的人本身做操作的!【实际上,因为如此才能排泄点!】

                如果还是难以理解,不妨不考虑点变量,而是考虑单位变量!
                设置N=一个步兵
                设置M=N
                杀死N
                那么,M此时是死是活?   

                房子里本来是个小萝莉,门口挂着两个牌子A和B
                然后,我发布命令:把A换成大叔!(移动a到大叔的位置)
                天灵灵,地灵灵,房子里的萝莉变成了大叔!
                萝莉控们听说了这个消息,自然不会去动A。
                但是,这时候有人开始打B的主意了!他们淫笑着推开房门!(移动单位到b)
                很遗憾,虽然牌子不一样,房子还是那个房子。
                于是,门里面是同样淫笑着的大叔。惨剧。

                如何避免这种惨剧呢?请看图。
3.jpg
在这张图里,虽然还是在萝莉的房间门口挂了两个牌子                  
               (设置a=萝莉的位置)         
               (设置b=a)
               随后的命令却有了变化!!(设置a到大叔的位置)
               根据上面的说明我们已经知道了,这句命令其实是抓住一个大叔关进另外的一间房子里,随后把牌子A改挂到那个房子上!
               那么,萝莉就会好好呆在房间里啦!

4.jpg
而且,因为牌子A已经改挂到大叔那间房子上了
               随后不管你把大叔怎么样,都不会影响到萝莉了!
               请看,我们多加了一句“清除A里的人”,萝莉控打开房间B却依然能看见俏生生的萝莉
               大叔你就安息吧...........

               而另一种写法,萝莉控依然会成功找到萝莉!
5.jpg
奥妙在于第二句
               (设置b=坐标点(a的x坐标,a的y坐标))
               坐标点(a的x坐标,a的y坐标)不再是一个变量了,而是一个真实的点!
               也就是说,这句是把萝莉复制出来一份,扔进新的房间里,挂上牌子B
               随后,虽然A房间里的萝莉变成大叔了,但是萝莉控依然在房间B里找到了俏生生的萝莉~

               点的传递,就这么简单.............


Q2:为啥"指定单位事件"中,不能把指定单位改成一个变量呢?
6.jpg

其实,这牵涉到基础的触发机制的问题。
       上面已经说过,变量(不仅仅是点变量)只是一个牌子而已。
       而在触发的条件里,所使用的必须是一个实在的房子里的东西,不能只是一个门牌!
       Tip2-1:事件中必须使用常量!
               也许你已经开始抱怨了,这种对房子里的人的操作这么麻烦?我们直接全部只换牌子不动房子里的人不就轻松了么?
               但其实,有些时候我们反而希望能够动到房子里的人,比如写触发事件的时候。
               可惜,事与愿违啊!
            
               细心的你也许已经注意到了老狼给我们的这个说明
7.jpg

这是什么意思呢?
               非常简单,也就是说,对于可以引发触发的“事件”,一经注册就不会被改变了!
               假如你想要做一个被动技能,让大法师的魔法值一旦低于一半就会触发,该怎么写事件呢?
               这是一个最容易想到的写法

8.jpg
遗憾的是,这是完全行不通的。
               后半部分的那一整个表达式【大魔法师的魔法值*0.5】其实就是所谓的参照值。
               在地图载入,为这个触发注册事件时,参照值就已经固定了。
               假设大法师初始的最大魔法值为 500,那么参照值【大魔法师的魔法值*0.5】=250
               事件就是:【大魔法师的魔法值低于250时】
               一开始,这个事件是正确的。
               然而,我们的大法师怎么可能保持出生的样子呢?他要去穿上装备,升升级!
               于是现在大法师的最大魔法师变成2000了。
               按理说,他的魔法值低于1000时触发该启动的。
               然而,实际上触发的事件依然是:【大魔法师的魔法值低于250时】
               根本无法变动!
               所以说,实际上参照值是一个不会变动的常量,是不能使用变量的!
               因此,在设置参照值时,实际上根本就不能设置为变量。
9.jpg

这时候,还记得第二课中,减少受到伤害的心灵之火问题的好学生们提问了!

Q3:可是在触发动作里“添加事件”时,参照值是可以为变量的啊!   
               是的,恭喜你答对了!
10.jpg
Tip3-1:添加事件里的变量还是常量!
               然而,实际上这里的“变量”所代表的只是添加事件时,触发单位所代表的值而已,是一个常量。
               假如r现在是200,那么你添加的是“大法师的魔法值小于200点”,而不是“大法师的魔法值小于r点”               
               假如unit现在是大法师,那么你添加的是“大法师接受伤害”,而不是“unit接受伤害”

               添加了事件后,r和unit不管再怎么变化,都不会影响到你添加了事件的那个触发的发动条件了!

               有人问过,减少伤害的心灵之火为什么不这么做?
11.jpg
12.jpg
13.jpg
  原因就是,地图初始化时,unit是“没有单位”
               为t2所添加的事件其实是“没有单位接受伤害”     
               随后不管unit变成什么,t2的事件都是 “没有单位接受伤害”
               于是华丽滴什么事件都不会发生了!   

ou99孽缘 title=
 楼主| 发表于 2010-12-16 18:11:42
{:6_306:}{:6_274:}{:6_276:}{:6_360:}{:6_327:}
钱啊
左小右
发表于 2011-9-18 06:56:19
谢谢了
XxGTO45xX
发表于 2011-9-19 00:22:47
顶啊!!!!!!!!!
kreaty
发表于 2011-10-6 13:30:26
管不了那么多了
gw96123
发表于 2011-10-16 00:59:00
.............
发表于 2011-10-22 18:34:51
顶下这个帖子
发表于 2011-12-2 19:40:08
顶啊            
苏苏苏
发表于 2011-12-9 12:24:23
学习了
发表于 2012-1-13 14:30:33
只要“施法”这种行为不再继续了,就会引发“停止施放技能”这个事件!
快速回复 返回顶部 返回列表