找回密码
 点一下
查看: 1474|回复: 4

jass_疑问函数的先后顺序.问题1解决.

[复制链接]
发表于 2008-11-20 20:52:38 | 显示全部楼层 |阅读模式
问题1:
[trigger]    事件
    条件
        ((触发单位) 拥有 神圣护甲) 等于 TRUE
    动作[/trigger]
[codes=jass]function UnitHasBuffBJ takes unit whichUnit, integer buffcode returns boolean
    return (GetUnitAbilityLevel(whichUnit, buffcode) > 0)
endfunction[/codes]
奇怪的是为什么返回GetUnitAbilityLevel(技能)?

问题2:
[codes=jass]function AA takes nothing returns boolean
endfunction

function BB takes nothing returns boolean
endfunction

function A takes nothing returns nothing
endfunction

function Btakes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_AB takes nothing returns nothing
    local trigger tri0 = CreateTrigger()
    local trigger tri1 = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(tri0,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(tri0,Condition(function AA))
    call TriggerAddAction(tri0,function A)
    call TriggerRegisterAnyUnitEventBJ(tri1,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(tri1,Condition(function BB))
    call TriggerAddAction(tri1,function B)
    set tri0 = null
    set tri1 = null
endfunction[/codes]这样写函数AB的顺序有关系呢??
发表于 2008-11-20 20:55:54 | 显示全部楼层
是否拥有buff本来就是判断buff等级的,buff不能添加,只能删除,删除方法也是删除技能

换言之,buff可以视为一类特殊的技能
回复

使用道具 举报

发表于 2008-11-21 16:30:03 | 显示全部楼层
没什么关系,两个Trigger同时触发。
回复

使用道具 举报

发表于 2008-11-21 16:41:51 | 显示全部楼层
函数顺序一般只要考虑到被调用者必须在调用者之前就好了
回复

使用道具 举报

w
发表于 2008-11-22 00:33:56 | 显示全部楼层
触发是在单个线程中执行的。
是串行,不是并行。
所以,A,B,不是同时运行的,是有先有后。
function B takes nothing returns boolean
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
     call BJDebugMsg(" In Func B");
endfunction

function A takes nothing returns nothing
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
     call BJDebugMsg(" In Func A");
endfunction

应该是所有的In Func A输出完毕后,才是In Func B的输出。
不会穿插在一起的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-21 10:20 , Processed in 0.029707 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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