搜索
发新帖

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

时间:2012-2-2 16:46 0 1692 | 复制链接 |
变量这个玩意吧,说简单也简单,但是说复杂时有的时候比J还复杂。
因为,只会用T的人大部分是因为没有编程基础,所以T中某些局限对他们来说完全是莫名其妙!
这一课的首先,我来说一个点变量的问题!

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

bl1.jpg

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

bl2.jpg

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

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

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

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

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

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

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


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

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

细心的你也许已经注意到了老狼给我们的这个说明
bl7.jpg

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

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

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

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

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

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