计时器类动态添加性能优化及计时器与单位组的配合性优化
1.计时器动态添加性能优化此方法目前可行性低........因为没找到好的方法来传递Code或者boolexpr
2.计时器与单位组的配合性优化
理由同上,比如说对X,Y坐标点所有敌对单位在2秒内击飞再落地.如果是每个单位绑定一次计时器,那么会创建多个计时器,所消耗的系统资源反而更多.不如将所有单位ADD到一个绑定计时器的单位组,然后对单位组进行LOOP操作比较节省资源.
以上都经过个人实验,效果不错.有不同的意见欢迎指出. 自杀.顺便说下,1.24还是不错的.特别是Hashtable用起来蛮爽的,比原来自己的HASH的舒服多了. 某些时刻的时间间隔是依靠某一时间点开始计数的
如果这个点不是正好在timer正好开始时
必然造成第一次执行的间隔小于默认间隔
而且使用同一个计时器
在某些做技能时候效果会很差,特别是间隔较长的时候
最后,开一堆计时器并不怎么卡…… 同学,卡一般是因为你的代码写的有问题。。
计时器再多也不会卡的。。
多半是因为你用的什么模型有问题,我的仇恨系统就是简单启动一个计时器,也没见得卡到那里去。
另外,请楼主注意,把所有东西放在一个里面做动作是下下策,因为jass限制每个代码只能执行一定时间,当你循环太多超时以后的代码会被自动忽略掉 计时器多了确实不会卡,但是如果里面的动作也很多呢...............
我一开始就是按照每个每个单位创建计时器这样子,结果后面要绑定闪电特效的时候卡的不成.
然后就是把所有计时器合并成一个,然后通过GROUP+LOOP做,一点不卡.很顺畅.
再另外......目前没啥导入模型..........
回2L:计时器以0.01秒运作的时候,误差间隔基本可以忽略的.......至少在我的地图里要求不到这么高的精度.
再再说明:观点一目前没可行性.......因为如果使用ExecuteFunc的话,还是会变得很卡,但是又没办法记录Code和Boolexpr来试试看................(用1.24自带的哈希函数) 动作多了也不会卡。。卡是你写法问题。。
另外,我是用ExecuteBoolexpr的。。 闪电绑定会卡??单位都不卡闪电会卡么……闪电可以说是魔兽里最简单的结构了,lz不要告诉我你用TDS都会卡……
话说eff你的那个ExecuteBoolexpr是不是那个要造先一大堆可破坏物的…… 我的写法应该没啥问题的说- -要不我扔点出来帮忙看看吧.被你们说的不确定了......... ExecuteBoolexpr的原型
integer SYS_BoolexprInt
boolean SYS_BoolexprResult = false
rect SYS_Rect_ForBoolexpr
//========BaseFuncStart=======================================================
function Print takes string s returns nothing
call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,0,s)
endfunction
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]