找回密码
 点一下
查看: 1339|回复: 13

关于全局变量的使用

[复制链接]
发表于 2009-1-4 08:35:54 | 显示全部楼层 |阅读模式
很BC的一个问题。
我在做JASS的时候一般都是很回避全局变量,因为我总觉得全局变量会冲突。
看了某位大人的优化后
如果我不想跨function传递参数,只是想让它代替局部变量,比如 udg_realX,udg_realY,这样就不用在local real  x ,local real y,是不是在调用这个function的时候可以考虑到它是的使用是瞬时的?
说白了,在到期的计时器又或是普通的函数里面它可以看成是普通的局部变量,在被反复调用和多次同时调用的时候不会冲突
希望高手指教一下
发表于 2009-1-4 09:49:45 | 显示全部楼层
看得好晕
有点没看懂
举例子吧
回复

使用道具 举报

发表于 2009-1-4 09:53:03 | 显示全部楼层
既然不需要传参,那么全局与局部貌似也没什么大的区别额
回复

使用道具 举报

 楼主| 发表于 2009-1-4 09:53:21 | 显示全部楼层
我刚开始设置了一个 udg_realX 和一个 udg_realY.

我的意思是在、我在一个function里面把他们当局部变量使用是不是不能出什么问题?因为这个function可能会被很多其他的触发同时调用

感谢猪头大人的回答,如果我将它放置到循环中呢?循环的计数采用局部变量,会不会因为循环的同时其他触发的调用会导致全局变量不稳定呢
回复

使用道具 举报

发表于 2009-1-4 10:20:53 | 显示全部楼层
局部变量就是防止同时使用造成的混乱
local real x= udg_realX
local real y= udg_realY
这样使用吧
回复

使用道具 举报

发表于 2009-1-4 10:22:24 | 显示全部楼层
如果循环中米有等待之类的,那么大胆使用吧~~
回复

使用道具 举报

 楼主| 发表于 2009-1-4 10:28:31 | 显示全部楼层
感谢LS两位大人回答,我回去在看一下,这个问题很是让我纠结
回复

使用道具 举报

发表于 2009-1-5 19:41:15 | 显示全部楼层
要注意一点的就是伤害单位这个函数会立即触发伤害事件的触发器,伤害事件的触发器里的动作执行完或者遇到等待时才会回到调用伤害单位这个函数的点来
回复

使用道具 举报

发表于 2009-1-5 19:58:18 | 显示全部楼层
突然想到
单位受伤害时 对单位造成100点伤害。。这样的触发会不会导致无限运行
回复

使用道具 举报

发表于 2009-1-5 20:11:56 | 显示全部楼层
会的,于是一般我是先关闭触发,再伤害,再打开
回复

使用道具 举报

发表于 2009-1-6 18:46:54 | 显示全部楼层
最苦恼的是有些技能的BUFF,就算调用函数删除也不是瞬间删除,如果用在伤害事件捕捉BUFF再删除BUFF并调用函数伤害该单位,就会无限运行而卡死,某些情况下又不能暂时关闭该触发
回复

使用道具 举报

发表于 2009-1-6 18:51:57 | 显示全部楼层
引用第8楼variable.z于2009-01-05 19:58发表的  :
突然想到
单位受伤害时 对单位造成100点伤害。。这样的触发会不会导致无限运行

我记得这不是当初v君回答过我的问题么.......

To Ls:一般这种情况下用马甲单位释放,捕捉伤害单位比较好吧........
回复

使用道具 举报

发表于 2009-1-7 11:02:33 | 显示全部楼层
命令,按键什么的也会抢线程吧?
回复

使用道具 举报

 楼主| 发表于 2009-1-8 11:09:12 | 显示全部楼层
感谢6的高人给我个提醒。
也就是说我在受到伤害的触发里面一旦将原来函数中存在的全局变量重新赋值以后,就有可能会导致单位伤害目标这个动作的前后全局变量改变,
比如说一个函数中存在了
set udg_X =GetUnitX(GetTriggerUnit())
而函数中存在一个单位伤害目标的动作
然而我在单位受到伤害事件里面一旦设置了 set udg_X = GetUnitX(GetTriggerUnit()))
当返回到原来的函数的时候 udg_X 就已经发生改变,不能被再次使用,除非重新赋值,是这么一个意思吧,
还有没有其他类似的需要注意的事项呢?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-21 14:24 , Processed in 0.030989 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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