找回密码
 点一下
查看: 2214|回复: 5

怎样确定一个Group里面有多少个Unit

[复制链接]
发表于 2008-1-20 18:34:08 | 显示全部楼层 |阅读模式
如题: 我已经创建了一个Group,并且里面添加里我具体也不知知道多少个的Unit。我用什么API可以确定里面多多少个Unit呢?
我添加的Unit到Group的函数是GroupEnumUnitsInRange
我试着在其cond函数里面,也就是GroupEnumUnitsInRange最后传入的参数的那个函数里面放置一个Cahe变量GroupMax 并让其不断的+1并放回GroupMax里面

function PickupUnit takes nothing returns boolean
     local integer groupmax
     set groupmax = GetStoredInteger(udg_GC,"Var", "GroupMax")        
     set groupmax = groupmax + 1
     call StoreInteger(udg_GC,"Var", "GroupMax",groupmax)
     return TRUE
endfunction

这样做好像是可行的,因为一旦我的GroupEnumUnitsInRange传入的半径变得有点大的时候(r=1000.00)机子就会变得爆卡,无法完成正常的测试,但当R=100.00的时候就可以测试出结果。

所以我想知道一下有没有什么方法可以得到一个Group的里面放置单位数量。

谢谢了
发表于 2008-1-20 18:53:54 | 显示全部楼层
WE里原来带的CountUnitInGroup

[codes=jass]function CountUnitsInGroupEnum takes nothing returns nothing
    set bj_groupCountUnits = bj_groupCountUnits + 1
endfunction[/codes]
[codes=jass]function CountUnitsInGroup takes group g returns integer
    // If the user wants the group destroyed, remember that fact and clear
    // the flag, in case it is used again in the callback.
    local boolean wantDestroy = bj_wantDestroyGroup
    set bj_wantDestroyGroup = false

    set bj_groupCountUnits = 0
    call ForGroup(g, function CountUnitsInGroupEnum)

    // If the user wants the group destroyed, do so now.
    if (wantDestroy) then
        call DestroyGroup(g)
    endif
    return bj_groupCountUnits
endfunction[/codes]
回复

使用道具 举报

 楼主| 发表于 2008-1-20 20:50:17 | 显示全部楼层
正解 谢谢 呵呵
回复

使用道具 举报

发表于 2008-1-23 20:33:10 | 显示全部楼层
BJ 函数中带有这个功能的。。。
回复

使用道具 举报

发表于 2008-1-24 22:23:54 | 显示全部楼层
然而你如果接触jass~~这个函数就变得不准了~~

其实该函数无非枚举单位组中每一个元素~~然后求它们的总数~~

但是不要忘了~~单位组中的元素并不一定是一个单位~~

因为单位组保存的是单位的handle~~说到底每个元素只是一串数字而已~~

因此我们可以随便地用I2U来将任意一个整数添加进单位组~~该整数handle所对应的也许是一个单位也许是一个物品也许是一个可破坏物~~甚至可能是一个毫无意义的数字~~


另一方面~~即使不刻意如此~~当一个单位被从地图中删除的时候也会导致单位组中handle指空~~

因此无论哪一方面~~该函数都是不能作准的~~

比较正确的方法是~~在 CountUnitsInGroupEnum()中增加一个该handle是否指向一个单位的判断~~
回复

使用道具 举报

发表于 2008-1-24 22:30:58 | 显示全部楼层
至于如何判断一个handle是不是指向一个单位~~可以有多种方式~~

比如GetUnitTypeId()~~返回非0的自然就是单位~~返回0的就不是单位咯~~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 00:46 , Processed in 0.032739 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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