单位组清空和删除的原理
学会JASS后,可以去分析下一些约定俗成的写法,比如为什么要删除单位组,为什么要在选取XX单位组前面加上[color=blue]set bj_wantDestroyGroup=ture [/color][color=red]============================================JASS的分割线=============================================[/color]
“单位组-选取区域内单位做动作”
这条语句等于创建了一个单位组 因此用完后应该把这个单位组删除 不然它会一直占用内存
我们用个单位组变量来保存改单位组,其实这个变量是指向内存中单位组的地址 如果我们用这个变量对下一个单位组赋值 那么之前创建的单位组就会一直留在那里 占用内存
但我们可以用一句J来解决这个问题,如下所示
[color=blue]自定义代码:set bj_wantDestroyGroup=ture[/color]
它的作用是删除临时单位组。为什么要加这个,让我们看下这条语句的JASS就清楚了
[jass]function GetUnitsInRectMatching takes rect r, boolexpr filter returns group
local group g = CreateGroup()
call GroupEnumUnitsInRect(g, r, filter)
call DestroyBoolExpr(filter)
return g
endfunction
[/jass]
看到没 其中有 local group g = CreateGroup() 也就是生成了一个单位组
而 最后创建的单位组( bj_lastCreatedGroup ) 也等于该单位组 但这只是暂时的 如果这时有其他单位组被创建 那么删除最后创建的单位组就不能删除该单位组
所以,这时加句
[color=blue]自定义代码:set bj_wantDestroyGroup=ture[/color] 在“选取XX区域内所有单位”,就可以达到目的
因为我们在T里使用的选取单位组,它的JASS代码是这样
[jass]function ForGroupBJ takes group whichGroup, code callback returns nothing
// If the user wants the group destroyed, remember that fact and clear //如果用户希望这个单位组被销毁,记得这事并清零标志(即将
// the flag, in case it is used again in the callback. // bj_wantDestroyGroup 重新设置为false), 以便用户重新使用
local boolean wantDestroy = bj_wantDestroyGroup
set bj_wantDestroyGroup = false
call ForGroup(whichGroup, callback)
// If the user wants the group destroyed, do so now. //如果用户希望单位组被销毁,那么这样做
if (wantDestroy) then
call DestroyGroup(whichGroup)
endif
endfunction[/jass]
不过上面方法还是有瑕疵,即当多个单位组被创建,还是有可能出问题,毕竟 bj_wantDestroyGroup是全局变量。
所以还是采取设置单位组yy=XX区域里满足XX条件的所有单位 事后再消除比较好
虽说
设置 Group=区域内所有符合条件的单位
选取Group内所有单位做动作
动作:一连串,略
删除单位组Group
需要说明的是,这里必须加上删除单位组Group,因为这时候变量Group指向的是临时单位组,这个单位组必须要删除掉。 顶~` 很多词看不懂,我想学.
local,endfunction,return等等
这些是什么意思呢? 这些是JASS中一些基础知识
local 是定义一个局部变量
function endfunction是一个函数体的“首”和“尾”
return 是返回
如果你想系统地了解 可看下置顶的JASS教程 恩
也就是说单位组用完后,调用DestroyGroup(whichGroup)
:ecc37 不用JASS代码可以吗?
直接删除创建的单位组也可以吧?
[[i] 本帖最后由 tianbinde 于 2008-6-12 17:25 编辑 [/i]] 一般说了,如果创建了多个单位组,会删不完全。 lss的触发..
那个动作只运行到第一个选取单位 就没 了..
单位组那时被删了.... 那怎么搞呀?
用什么删除?
我用的有 每秒创建单位组的
还有,刷怪用的
有的有变量,有的没有
怎么搞? 用t也不难啊,多设置几个单位组就可以了。:ecc15
页:
[1]