找回密码
 点一下
查看: 2502|回复: 18

引用变量的技能触发在两个单位使用的情况下引起的变量冲突,该如何解决?

[复制链接]
发表于 2008-2-19 10:18:15 | 显示全部楼层 |阅读模式
比如说单位A释放技能"闪电",此时执行触发器Trig_1,设置单位A=(变量)unit,

然后,在此变量仍需要使用的期间,又有单位B释放了相同的技能"闪电",此时也执行了触发器Trig_1,于是(变量)unit就=B而不是=A了

所以,之后的动作将不再对A起作用,只对B起作用

这一类变量上的冲突,该如何解决

评分

参与人数 1威望 -5 收起 理由
沉默の罪恶 -5 对不起,3连是不可以的.

查看全部评分

发表于 2008-2-19 10:26:23 | 显示全部楼层
局部变量
local unit tmp = GetTriggerUnit()

在T中使用的话
现在变量编辑器里面申明一个变量,记住名字
然后在技能的触发的开头加上一个自定义代码
local unit udg_xxx(先前全局变量的名字)
然后直接用就可以老
unit为变量类型,可以根据实际需要改,如integer之类的
但必须和先前申明的全局变量类型一致
回复

使用道具 举报

发表于 2008-2-19 10:32:17 | 显示全部楼层
全局变量申明 的时候不要加udg
但在你的自定义代码里申明局部变量时必须是
local <变量类型> udg_你的变量名
因为在编译的时候WE会自动给所有全局变量加上个udg_头
回复

使用道具 举报

 楼主| 发表于 2008-2-19 10:36:31 | 显示全部楼层
是jass的解决方法?没怎么看明白```jass还只是初学者水平
回复

使用道具 举报

发表于 2008-2-19 10:38:22 | 显示全部楼层
jass,这种冲突也只能JASS
在触发的开头加上一句自定义代码就行
回复

使用道具 举报

发表于 2008-2-19 11:44:02 | 显示全部楼层
引用楼主7n.mosoul于2008-02-19 10:18发表的 引用变量的技能触发在两个单位使用的情况下引起的变量冲突,该如何解决? :
比如说单位A释放技能"闪电",此时执行触发器1,设置单位A=(变量)unit,

然后,在此变量仍需要使用的期间,又有单位B释放了相同的技能"闪电",此时也执行触发器2,(变量)unit就=B而不是=A了

所以,之后的动作将不再对A起作用,只对B起作用
.......

如果你每个单位有不同的自定义数的话,或者你每个玩家只控制一个英雄,那么,你可以用变量组代替,比如A执行的时候,设置单位A=unit[触发单位的自定义数],那调用的时候也可以用这个变量名。
回复

使用道具 举报

 楼主| 发表于 2008-2-19 14:30:38 | 显示全部楼层
[codes=jass]function TriUnit1 takes integer IntNo returns nothing
local unit udg_danwei1[IntNo] =GetTriggerUnit()
endfunction[/codes]

写了这样的自定义代码,不知道对不对

之后在触发Action的第一句加上: call TriUnit1(2)


请问这样是否能实现目的?
回复

使用道具 举报

发表于 2008-2-19 15:06:18 | 显示全部楼层
这样没有意义的。您要知道“局部”的意思就是只能在一个方法内使用。。。“全局”的意思就是可以在地图任意地方使用。
所以您在一个方法内使用local而且不返回且不做操作。那样是没有意义的。
而且这个语句本身就素不正确的。连保存地图都保存不了。
回复

使用道具 举报

发表于 2008-2-19 15:09:22 | 显示全部楼层
恩………………lss的语句是不符合语法规范的………………

如果对jass运用不好的话,还是使用自增下标的数组比较简单………………
回复

使用道具 举报

 楼主| 发表于 2008-2-19 15:13:28 | 显示全部楼层
JASS方面我是10成10的新手
回复

使用道具 举报

 楼主| 发表于 2008-2-19 15:19:51 | 显示全部楼层
引用第8楼zhuzeitou于2008-02-19 15:09发表的  :
恩………………lss的语句是不符合语法规范的………………

如果对jass运用不好的话,还是使用自增下标的数组比较简单………………


增加下标的方法我一直在使用```

不过昨晚在使用"计时器到期"这个事件时,发现之前声明的单位变量无法在((单位所有者)的索引号)的"单位"中引用,于是崩溃
回复

使用道具 举报

 楼主| 发表于 2008-2-19 15:45:31 | 显示全部楼层
[codes=jass]function TriUnit1 takes nothing returns nothing
    local  integer IntNo= 2
    set unit udg_danwei1[IntNo] =GetTriggerUnit()
endfunction[/codes]

这次的自定义语句能否起作用```如果不能,问题在何处?
回复

使用道具 举报

发表于 2008-2-19 15:49:02 | 显示全部楼层
引用第11楼7n.mosoul于2008-02-19 15:45发表的  :
[codes=jass]function TriUnit1 takes nothing returns nothing
    local  integer IntNo= 2
    set unit udg_danwei1[IntNo] =GetTriggerUnit()
endfunction[/codes]

.......

set之后不用加变量类型的,直接加变量名就行了
回复

使用道具 举报

 楼主| 发表于 2008-2-19 15:56:58 | 显示全部楼层
可是这样```不是每当想用局部变量定义触发单位时,都要写一次么

难道不能像我在6楼"试图"做到的那样```一个语句在多个触发中使用?
回复

使用道具 举报

发表于 2008-2-19 15:58:41 | 显示全部楼层
只要函数声明的位置在调用之前,都可以用call语句来调用
回复

使用道具 举报

发表于 2008-2-19 16:09:22 | 显示全部楼层
hmm。偶灭有完全明白楼主想表达的意思。
总的来说呢,楼主想要以单位为索引,获取某一个值。这在WE里面素灭有办法直接做到的。当然每个单位可以有一个自定义数值。但是这个值也只能是一个。而不能存多个值。所以这里用了,其它地方就没办法用之类的。
由此,WEer们就采用了别的非标准的办法,handle这玩意。由于handle在很多情况下可以正确的“代表”某一种东西,比如单位,计时器,触发之类的。所以使用handle再加上WE自带的缓存这种东西。做成了可以让一个单位对应多个值的玩意。
先不论使用这种方法的缺点。要学习这些东西还是需要了解蛮多东西的。楼主需要一步一步来。嗯嗯。

以上完全是废话。嗯嗯。
回复

使用道具 举报

 楼主| 发表于 2008-2-19 21:06:05 | 显示全部楼层
刚才找了[月协出品]YD的Jass教程-变量篇
看完终于知道了解决办法

在变量编辑器里设置全局变量
声明局部变量 local (变量类型) (变量名)即可使用了
回复

使用道具 举报

发表于 2008-2-19 21:16:19 | 显示全部楼层
由于使用这个方法只限于一个变量。所以并不推荐楼主使用。
回复

使用道具 举报

发表于 2008-2-20 10:29:18 | 显示全部楼层
我当初最早涉及Jass的

就是如何将全局变量化为局部变量 造福于LZ提出问题的解决

LZ如果将这简单问题做好 就是Jass很好的启蒙

以后您Jass会一发不可收拾的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 08:46 , Processed in 0.035561 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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