找回密码
 点一下
查看: 621|回复: 11

问关于触发器变量的问题。

[复制链接]
发表于 2013-1-23 17:21:00 | 显示全部楼层 |阅读模式
看了几个别人的地图的触发后发现,很多地方可以不用设置变量也可以完成触发的,用函数。是不是人为设置变量的话,触发器的效率要高些?
发表于 2013-1-23 19:26:15 | 显示全部楼层
不明白你想说什么。变量和函数是两个截然不同的概念,他们的功能也没有相似之处。
变量的意义在于记录数据,在需要的时候再调取这个数据。举个简单的例子,假设有一个RPG类游戏,进入游戏后创建一个机枪兵,同时还有别的一样的机枪兵,然后你创建的这个机枪兵需要杀死足够多的敌人才能获胜。那么在创建这个机枪兵的时候就需要记录这个它,从而和其他机枪兵区分开。
函数的意义在于运算,函数自己不具备长时间储存数据供随时调用的能力。通常的用法是:在很多地方用到相同或非常相似的运算,如果把这个运算单独提取出来,形成一个函数,就能在所有用到这个运算的地方使用一条函数语句来完成这个运算,而不是重复的写这个运算,从而提高效率,也方便了调试和更新——假设你需要纠错或添加某些功能,只需要改动一处就可以了。

点评

比如关于一个单位的动作 创建单位 对上次创建的单位使用动作 或者是 创建单位 变量X=上次创建的单位 对X使用动作 我在别人的地图里面都是看到第二种。  详情 回复 发表于 2013-1-23 23:51
好详细~大概了解了~  详情 回复 发表于 2013-1-23 23:03
回复

使用道具 举报

 楼主| 发表于 2013-1-23 23:03:37 | 显示全部楼层
yxxiaobin 发表于 2013-1-23 19:26
不明白你想说什么。变量和函数是两个截然不同的概念,他们的功能也没有相似之处。
变量的意义在于记录数据 ...

好详细~大概了解了~
回复

使用道具 举报

 楼主| 发表于 2013-1-23 23:51:50 | 显示全部楼层
yxxiaobin 发表于 2013-1-23 19:26
不明白你想说什么。变量和函数是两个截然不同的概念,他们的功能也没有相似之处。
变量的意义在于记录数据 ...

比如关于一个单位的动作

创建单位
对上次创建的单位使用动作

或者是
创建单位
变量X=上次创建的单位
对X使用动作

我在别人的地图里面都是看到第二种。

点评

那么我想说的是变量,而不是函数。 你说的第一种情况叫做不使用变量,这样做的好处在于效率稍微高那么一点,但是你创建这个单位后过一会儿才需要对它进行某些操作,如果不使用变量,将无法知道哪个单位才是刚创建这  详情 回复 发表于 2013-1-25 21:21
回复

使用道具 举报

发表于 2013-1-25 20:32:53 | 显示全部楼层
如果你只在创建单位后的瞬间需要对单位使用动作,那么使用前者可以提高效率。
但是大部分时候你需要在很多时间对单位使用动作。
例如,最为简单的倒计时复活英雄:

触发器1:玩家选择了英雄(按下按钮之类的)
动作:为玩家创建英雄
变量A=刚才创建的单位

触发器2:单位死亡
条件:死亡单位(触发单位)是==变量A
动作:开启计30秒时器
变量T=刚才创建的计时器

触发器3:计时器到期
条件:到期的计时器==变量T
动作:复活单位变量A

这种时候就必须使用变量啦~。

PS:以上触发器仅为实例,在实际使用时需要根据实际情况进行扩充和完善。

点评

就是说,这里的选择:  详情 回复 发表于 2013-1-26 00:42
刚才开启的计时器吧?  发表于 2013-1-25 21:16
回复

使用道具 举报

发表于 2013-1-25 21:21:54 | 显示全部楼层
本帖最后由 yxxiaobin 于 2013-1-26 00:50 编辑
惊风流水 发表于 2013-1-23 23:51
比如关于一个单位的动作

创建单位


那么我想楼主说的是变量,而不是函数。
你说的第一种情况叫做 不使用变量,这样做的好处在于效率稍微高那么一点,但是假如你创建这个单位后需要过一会儿才对它进行某些操作,如果不使用变量,将无法知道哪个单位才是刚创建这个单位。因为最后一次创建的单位貌似只能在当前触发有效,在其他触发无法指代这个单位,而且就算能指代也不行,万一你在创建这个单位后又创建了其他单位呢,那么这个最后一次创建的单位就不对了,所以需要变量。另外四夕水酱的例子非常详细生动,我觉得你好好看看应该有帮助。

点评

难道是我看错了。本来我也是和四夕水说的那样去理解的。设置变量,为了方便引用。不过,看了几个地图的触发之后,感觉有些变量设置了以后基本没有用过了。所以就对我原本的想法产生怀疑了。 最后问一个问题啊  详情 回复 发表于 2013-1-26 00:52
回复

使用道具 举报

 楼主| 发表于 2013-1-26 00:42:43 | 显示全部楼层
四夕水草肃 发表于 2013-1-25 20:32
如果你只在创建单位后的瞬间需要对单位使用动作,那么使用前者可以提高效率。
但是大部分时候你需要在很多 ...

就是说,这里的选择:C:\Documents and Settings\Administrator\桌面

点评

0.0原来我不会添加图片~  详情 回复 发表于 2013-1-26 00:43
回复

使用道具 举报

 楼主| 发表于 2013-1-26 00:43:44 | 显示全部楼层
惊风流水 发表于 2013-1-26 00:42
就是说,这里的选择:

0.0原来我不会添加图片~

点评

请使用高级模式回复,然后需要把图片传到服务器。直接回复只能使用网络图片。  发表于 2013-1-26 00:49
回复

使用道具 举报

 楼主| 发表于 2013-1-26 00:52:15 | 显示全部楼层
yxxiaobin 发表于 2013-1-25 21:21
那么我想说的是变量,而不是函数。
你说的第一种情况叫做不使用变量,这样做的好处在于效率稍微高那么 ...

难道是我看错了。本来我也是和四夕水说的那样去理解的。设置变量,为了方便引用。不过,看了几个地图的触发之后,感觉有些变量设置了以后基本没有用过了。所以就对我原本的想法产生怀疑了。



最后问一个问题啊:触发器里面的一个动作的“源”----《函数 预设 变量 值 自定义脚本。》他们的运行速度是不是一样的?@四夕水草肃  

点评

建议你有时间看一些编程基础类的书,如果你一点这方面的经验也没有,那么学习VB或C语言可能是个不错的选择。不一定要多精通,主要是学习编程基础和一般编程思路。  发表于 2013-1-26 01:21
1.不用怀疑,全局变量的主要作用就是长期储存一个值,在需要时随时调用它。而局部变量一般来说不能长期保存(除非你加了等待),因为它局限在函数或触发器动作序列(本质也是一个函数)的内部,局部变量的主要作用在  详情 回复 发表于 2013-1-26 01:14
回复

使用道具 举报

发表于 2013-1-26 01:14:04 | 显示全部楼层
本帖最后由 yxxiaobin 于 2013-1-26 01:19 编辑
惊风流水 发表于 2013-1-26 00:52
难道是我看错了。本来我也是和四夕水说的那样去理解的。设置变量,为了方便引用。不过,看了几个地图的触 ...


问题1.不用怀疑,全局变量的主要作用就是长期储存一个值,在需要时随时调用它。而局部变量一般来说不能长期保存(除非你加了等待),因为它局限在函数或触发器动作序列(本质也是一个函数)的内部,在一个函数或触发器中,无法访问另一个函数或触发器中的局部变量,当一个过程结束了,这个过程内的局部变量也就被销毁了(只是变量被销毁,变量记录的值并不一定消失,比如销毁一个单位变量,不会导致它记录的那个单位也被杀死或移除)。局部变量的主要作用在于辅助运算,比如作为循环的计数器,作为一个很复杂的运算的中间结果等等。全局变量和局部变量各有优势,一般来说,如果该变量需要在不同地方使用,那么必须用全局变量,否则,优先选择局部变量。我猜测,你说的用过就完事的变量一般就是局部变量了。

问题2.使用不同的数据来源,效率并不一样,最起码,有些是直接赋值,有些需要很复杂的运算,所以不可能一样。

点评

所以我才猜测是不是用函数引用“上一次创建的单位”是不是比自己设置“变量=”的运算量要大些。  详情 回复 发表于 2013-1-26 14:14
回复

使用道具 举报

发表于 2013-1-26 10:15:32 | 显示全部楼层
都说了只是举个例子,不要在意细节。
回复

使用道具 举报

 楼主| 发表于 2013-1-26 14:14:10 | 显示全部楼层
yxxiaobin 发表于 2013-1-26 01:14
问题1.不用怀疑,全局变量的主要作用就是长期储存一个值,在需要时随时调用它。而局部变量一般来说不能 ...

所以我才猜测是不是用函数引用“上一次创建的单位”是不是比自己设置“变量=”的运算量要大些。

点评

这个不是很清楚,不过就算有差别,应该也不大。不过我个人的习惯,还是使用变量,这个不容易出现错误。  发表于 2013-1-26 17:25
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 20:13 , Processed in 0.135732 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表