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

GetTriggerUnit()在什么范围内有效

[复制链接]
发表于 2008-3-27 19:20:00 | 显示全部楼层 |阅读模式
比如,我做了一个触发器MyTrigger。
那么在这触发器里面每次调用GetTriggerUnit()是不是都得到相同的一个单位A。有没有可能变化?
还有就是,如果我在这个触发器里面call TriggerExecute( gg_trg_AnotherTrigger )那么在此次运行的AnthoerTigger中GetTriggeriUnit()是不是还是A??
是不是在MyTrigger结束之前,调用的GetTriggerUnit()就像是局部变量一样,只可能返回A?


关于局部变量,我比较困惑。
globlas

integer n=1
integer m=0

endglobals



function Func002 takes nothing returns nothing
        set n=n+1
    endfunction



function Func001 takes nothing returns nothing
    local integer n=96
    call MyFunc()
    m=n
endfunction


Func001运行的结果是全局变量n成为2,全局变量m成为96??
在函数中调用函数,局部变量不能传递么?
发表于 2008-3-27 19:23:43 | 显示全部楼层
GetTriggerUnit么就是触发单位呀,返回的就是触动触发的单位,在触发一次执行的时候的返回值当然是一样的
TriggerExecute函数貌似保存原触发出了GetTriggeringTrigger外的所有触发相关内容
回复

使用道具 举报

 楼主| 发表于 2008-3-27 19:35:25 | 显示全部楼层
ls的是不是很确信?我觉得你说的很像是真的。
但觉得GetTriggeringTrigger也应该传递过来。它为什么就会特殊呢?



call ExecuteFunc( )这个玩意很不熟悉。貌似和call TriggerExecute( )不会有多大的差别吧?

像GetTriggeringTrigger,GetTriggerUnit( )等,是不是应该在监视器也就是“事件”触发之后立刻就被赋了值,而且是赋给了一个局部变量。然后在整个触发器一次运行过程中不会再变化。

C程放下很久了。对自己的理解不是很确信。。
回复

使用道具 举报

发表于 2008-3-27 20:03:59 | 显示全部楼层
好象在单位组中无效,我在单位组中试过获得触发单位,和技能释放点,结果都失败了。
回复

使用道具 举报

 楼主| 发表于 2008-3-27 20:14:41 | 显示全部楼层
call ExecuteFunc( )
不能传递局部变量。。。。
刚才测试的结果是:再某个函数中定义了局部变量udg_n,调用call ExecuteFunc( ),call ExecuteFunc( )的同名变量udg_n赋值之后,全局变量udg_n值改变了。。。

GetTriggerUnit( )为什么能够传递呢????
回复

使用道具 举报

发表于 2008-3-28 14:52:51 | 显示全部楼层
GetTriggerUnit()得到的本来就是系统设好的一个全局变量  不用wait动作应该就不会改变(或者是导致这个触发被延迟的情况)
回复

使用道具 举报

traxex 该用户已被删除
发表于 2008-3-31 12:27:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-3-31 13:39:23 | 显示全部楼层
局部变量无法传递,  用缓存记录吧
回复

使用道具 举报

 楼主| 发表于 2008-4-2 12:14:51 | 显示全部楼层
事实证明同一个触发器被多次打开。每次打开的GetTriggeriUnit()可以不同,并且,不会互相干扰。
TriggerA第一次运行GetTriggeriUnit()得到unit001,每隔1秒,将这个单位向右移动200码,持续30秒。第二次运行GetTriggeriUnit()得到unit002,每隔1秒,将这个单位向右移动200码,持续30秒。

推测:
GetTriggerUnit()是一用个全局变量来记录的,但这个全局变量是一个很大的数组,每次事件发生后触发得到的都不一样(数组指标上限应该也存在,当触发器极短时间内打开许多次,可能会出问题)。并且这个GetTriggerUnit()的值仅在事件发生之后才赋值,并与该次事件对应起来,和上一次或下一次的事件没有关系。TriggerExecute来调用其他触发器不会改变GetTriggerUnit()以及其他的所有事件响应函数的具体值。
回复

使用道具 举报

发表于 2008-4-3 08:34:50 | 显示全部楼层
引用第6楼traxex于2008-03-31 12:27发表的  :
war3的触发器应该运行在一个线程中的.
系统中有一系列全局变量,比如:
TriggeringTrigger
TriggerUnit
SpellTargetUnit
.......

你这段绝大部分是胡写一气~~你确定你自己测试过么?~~
回复

使用道具 举报

发表于 2008-4-3 09:04:31 | 显示全部楼层
[trigger]
S1
    Events
        Unit - A unit enters (Entire map)
    Conditions
    Actions
        Debug - Debug (Name of (Target unit of ability being cast))
[/trigger]

[trigger]
S2
    Events
        Unit - Mountain King 0002 <gen> Begins casting an ability
    Conditions
    Actions
        Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing degrees
        Wait 0.00 seconds
        Debug - Debug (Name of (Target unit of ability being cast))
[/trigger]

好好去试试看这一对触发器吧~~你会发现先会显示(null)~~然后再显示目标的名字~~它们完全是互不干扰的~~

好好看看它跟你那个例子的区别吧~~别以为TriggerExecute相当于一个新触发~~我这例子才算~~

而且Trigger Unit和Target unit of ability being cast不同~~后者在触发后1秒就设null了~~而Trigger Unit在整个触发中都有效~~所以我这个例子才只写等0.00~~
回复

使用道具 举报

traxex 该用户已被删除
发表于 2008-4-3 13:26:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-4-3 22:15:23 | 显示全部楼层
你起码把我10楼那帖子试一下再回吧?~~
回复

使用道具 举报

traxex 该用户已被删除
发表于 2008-4-3 22:31:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

traxex 该用户已被删除
发表于 2008-4-3 22:33:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-4-7 19:52:37 | 显示全部楼层
GetTriggerUnit() 返回的是一个事件中的“触发单位”,或者按LZ的话说,是在一个事件的范围内有效。“事件”是指游戏里发生的特定事情,如一个单位死了或一个单位复活了等等。

所以这个函数必须在一个事件内才能返回正确的值,否则会返回空值(null)。

另外这个函数在某些事件中是有有效期的,比如:

call TriggerSleepAction(10.0)
call KillUnit( GetTriggerUnit())

在某些事件中单位不会被杀死。
回复

使用道具 举报

发表于 2008-4-7 21:07:38 | 显示全部楼层
我倒是在意6l 提出的例子,如果仅是失误所致没必要处理得这么暧昧啊。。但如果是真实存在的话又几乎想象不出可能性来
回复

使用道具 举报

发表于 2008-4-8 11:07:49 | 显示全部楼层
你想太多老~~

朱朱在小黑屋呆多了~~自然会染上这种故作神秘~~
回复

使用道具 举报

发表于 2008-4-10 16:53:00 | 显示全部楼层
引用第15楼狡猾的兔子于2008-04-07 19:52发表的  :
GetTriggerUnit() 这个函数在某些事件中是有有效期的,比如:

call TriggerSleepAction(10.0)
call KillUnit( GetTriggerUnit())

在某些事件中单位不会被杀死。.......
能举个实例么,我一直以为触发单位是在本次触发结束后才失效的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 17:42 , Processed in 0.034187 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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