找回密码
 点一下
查看: 822|回复: 12

关于动态注册的问题

[复制链接]
发表于 2012-2-7 13:17:59 | 显示全部楼层 |阅读模式
是想依照做捕捉伤害的方法做击退效果,于是用动态注册的方法,但是不知道为什么地图初始化时候选取单位的函数都不运行。。
[jass]

globals
    trigger Damage
    trigger KnockBack
endglobals

function RegisterUnits takes nothing returns nothing
    call TriggerRegisterUnitEvent(KnockBack,GetEnumUnit(),EVENT_UNIT_DAMAGED)
    call BJDebugMsg("dddddd")
endfunction

function GetUnitsAction1 takes nothing returns nothing
    call ForGroup(GetUnitsInRectAll(GetEntireMapRect()),function RegisterUnits)
    call BJDebugMsg("cccccc")
endfunction

function InitTrig_GetUnits1 takes nothing returns nothing
    local trigger GetUnits1=CreateTrigger()
    call TriggerAddAction(GetUnits1,function GetUnitsAction1)
    call BJDebugMsg("eeeeee")
    set GetUnits1=null
endfunction
[/jass]

然后debug就只有显示eeeeee,这是为什么?
发表于 2012-2-7 15:05:55 | 显示全部楼层
InitTrig_GetUnits1   这个没注册事件……
回复

使用道具 举报

 楼主| 发表于 2012-2-7 15:57:59 | 显示全部楼层
地图初始化事件本来就是没有的吧
回复

使用道具 举报

 楼主| 发表于 2012-2-7 15:58:30 | 显示全部楼层

回 lwj_123 的帖子

lwj_123:InitTrig_GetUnits1   这个没注册事件…… (2012-02-07 15:05) 
没法直接回复。。。
回复

使用道具 举报

发表于 2012-2-7 17:04:18 | 显示全部楼层

回 又回西厢 的帖子

又回西厢:地图初始化事件本来就是没有的吧  (2012-02-07 15:57) 
所以说自然就没办法调用呢~

要么你就在main函数里面写上调用的代码。
要么在InitTrig_GetUnits1里面直接调用。
回复

使用道具 举报

 楼主| 发表于 2012-2-7 17:15:13 | 显示全部楼层

回 希瓦 的帖子

希瓦:

所以说自然就没办法调用呢~

要么你就在main函数里面写上调用的代码。
要么在InitTrig_GetUnits1里面直接调用。
不过我看到了这么个东西:
QQ截图20120207172830.jpg

似乎勾选上了就应该是地图初始化了啊。。
回复

使用道具 举报

发表于 2012-2-7 17:45:35 | 显示全部楼层
首先,你需要知道Jass里面是没有“地图初始化”事件的。

地图初始化时,魔兽将执行地图的main函数,以此来完成创建单位,注册触发等功能。

GUI中的“地图初始化”事件,实际上是在main函数中调用某个函数执行该触发。

而在WE里面是不能修改main函数的,所以如果不在GUI中为函数添加“地图初始化”事件,就不能自动执行该触发(但是注册触发的函数还是会被执行,所以我们可以把执行动作的代码放到注册触发的代码中)

所以呢,如果想要在“地图初始化”的时候执行某个触发,我们可以选其一:
1)在GUI中为函数添加“地图初始化”事件
2)在注册触发的函数InitTrig_XXXX中,直接就执行触发
3)通过某些工具修改main函数
4)………………

而“运行地图初始化”并不是字面上的意思……实际上它指触发的事件是否会被触发
实际上他就是“disabletrigger”…………

对于这些问题,使用mpq工具打开地图,导出war3map.j可以很好的看出端倪。
回复

使用道具 举报

 楼主| 发表于 2012-2-7 18:29:59 | 显示全部楼层

回 希瓦 的帖子

希瓦:首先,你需要知道Jass里面是没有“地图初始化”事件的。

地图初始化时,魔兽将执行地图的main函数,以此来完成创建单位,注册触发等功能。

GUI中的“地图初始化”事件,实际上是在main函数中调用某个函数执行该触发。
....... (2012-02-07 17:45) 
原来如此。。太感谢了!以前习惯了T,这两天才学着写J,有点不习惯。。话说JASSCRAFT好像也没法直接读到带main函数的J文件吧,如果用MPQMaster导出来不算的话
回复

使用道具 举报

 楼主| 发表于 2012-2-7 18:33:41 | 显示全部楼层
啊,我找到怎么看了
回复

使用道具 举报

发表于 2012-2-7 18:39:41 | 显示全部楼层
JassCraft左下角可以直接打开地图,甚至直接修改地图的J文件……

问题解决请修改分类为解决~~
回复

使用道具 举报

 楼主| 发表于 2012-2-7 21:33:22 | 显示全部楼层

回 希瓦 的帖子

希瓦:首先,你需要知道Jass里面是没有“地图初始化”事件的。

地图初始化时,魔兽将执行地图的main函数,以此来完成创建单位,注册触发等功能。

GUI中的“地图初始化”事件,实际上是在main函数中调用某个函数执行该触发。
....... (2012-02-07 17:45) 
又想不明白了。。那个ConditionalTriggerExecute()是干什么用的啊,里面if的TriggerEvaluate()不知道是在判断什么。。
回复

使用道具 举报

发表于 2012-2-7 22:05:37 | 显示全部楼层
[trigger]对战初始化
    事件
        地图初始化
    条件
    动作
        触发器 - 运行 (当前触发) (检查条件)
        触发器 - 运行 (当前触发) (无视条件)
[/trigger]
转成自定义代码就是:

function Trig________________u_Actions takes nothing returns nothing
    call ConditionalTriggerExecute( GetTriggeringTrigger() )
    call TriggerExecute( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig________________u takes nothing returns nothing
    set gg_trg________________u = CreateTrigger(  )
    call TriggerAddAction( gg_trg________________u, function Trig________________u_Actions )
endfunction
回复

使用道具 举报

发表于 2012-2-7 22:14:05 | 显示全部楼层
TriggerEvaluate是用来判断触发条件是否成立的。
//===========================================================================
// Runs the trigger's actions if the trigger's conditions evaluate to true.
//
function ConditionalTriggerExecute takes trigger trig returns nothing
    if TriggerEvaluate(trig) then
        call TriggerExecute(trig)
    endif
endfunction

//===========================================================================
ConditionalTriggerExecute其实就是:如果条件成立,那么执行动作。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 13:21 , Processed in 0.053053 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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