找回密码
 点一下
查看: 2008|回复: 11

ExecuteBoolexpr系统。

[复制链接]
发表于 2009-5-2 14:49:24 | 显示全部楼层 |阅读模式
无解释,对TriggerExecute和ExecuteFunc效率深恶痛绝滴童鞋可以看看。

使用ExecuteBoolexpr函数可以方便地执行某个Boolexpr

globals
boolexpr array SYS_Boolexpr
boolean SYS_BoolexprResult  = false
endglobals

function SetBoolexprResult takes nothing returns nothing
    set SYS_BoolexprResult = true
endfunction

function ExecuteBoolexpr takes boolexpr be returns boolean
    set SYS_BoolexprResult = false
    call EnumDestructablesInRect(SYS_Rect_ForBoolexpr,be,function SetBoolexprResult)
    return SYS_BoolexprResult
endfunction

function DestructablesConfig takes nothing returns nothing
    call Print("find")
    call RemoveDestructable(GetFilterDestructable())
endfunction

function InitBoolexprSystem takes integer dId returns nothing
    local rect r = GetWorldBounds()
    local boolexpr be = Condition(function DestructablesConfig)
    local destructable dst
    local real x = GetRectMinX(r)+50.0
    local real y = GetRectMinY(r)+50.0
    set SYS_Rect_ForBoolexpr = Rect(x,y,x+150.0,y+150.0)
    call EnumDestructablesInRect(SYS_Rect_ForBoolexpr,be,null)
    set dst = CreateDestructable(dId,GetRectCenterX(SYS_Rect_ForBoolexpr),GetRectCenterY(SYS_Rect_ForBoolexpr),0,0,0)
    call SetDestructableInvulnerable(dst,true)
    call DestroyBoolExpr(be)
    set be = null
    set r = null
endfunction

评分

参与人数 1威望 +32 收起 理由
kook + 32 原创内容

查看全部评分

 楼主| 发表于 2009-5-2 14:49:48 | 显示全部楼层
当然你们可以无视Print函数
回复

使用道具 举报

发表于 2009-5-2 15:01:01 | 显示全部楼层
boolexpr 跟 code 只要先「紀錄」之後,可以在任何地方呼叫(也包括向後呼叫)

有 VJ 的可以用 VJ 創造 boolexpr 變量,會方便很多,實用的東西!
回复

使用道具 举报

 楼主| 发表于 2009-5-2 15:05:17 | 显示全部楼层
code不能用array是个遗憾,不然我也不会弄这个函数来用了。

实际上执行的过程很猥琐呢。。
回复

使用道具 举报

发表于 2009-5-2 15:11:36 | 显示全部楼层
可以用 Return Bug 把 code 儲存成 integer ,然後拿去跑 ForGroup
這樣的系統有人做過了,好像是GA的JASS教程作者Ev大做的

當然,直接用Boolexpr 應該會更有效率的
回复

使用道具 举报

发表于 2009-5-2 15:38:08 | 显示全部楼层
恩那~以前的想法是弄个1个单位的单位组来forgroup的,不过现在看看用可破坏物应该比较有效率吧

和一开始创建触发器在用的时候调用比呢
回复

使用道具 举报

 楼主| 发表于 2009-5-2 16:44:47 | 显示全部楼层
主要是可以预见到I2C会被blz封杀所以就没用了
回复

使用道具 举报

发表于 2009-5-3 17:23:27 | 显示全部楼层
果然你做了这个=_=
回复

使用道具 举报

发表于 2009-5-6 11:51:08 | 显示全部楼层
Execte系列的慢在哪里呢

ps:橙子头像换得真勤快
回复

使用道具 举报

阿里山慝少 该用户已被删除
发表于 2009-5-6 12:36:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-5-6 14:48:56 | 显示全部楼层
ExecuteFunc和TriggerExecute实际上都是执行了一个异步的新线程,这个就慢老多了。
如果使用以下的东西会发现执行前后打印的时间不一样。
print(GetSystemTime())
TriggerExecute(xxx)
print(GetSystemTime())
回复

使用道具 举报

发表于 2009-5-6 16:51:08 | 显示全部楼层
ExecuteFunc 据说是要搜索全局的名字 所以慢,
然后他和 TriggerExecute 都还要在那个消息机制下 排队下把..

act不是有弄个触发器消息机制的图 如下 触发器消息机制.jpg
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:04 , Processed in 0.253108 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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