找回密码
 点一下
查看: 2475|回复: 10

关于Group问题的讨论

[复制链接]
发表于 2008-11-30 23:09:36 | 显示全部楼层 |阅读模式
ForGroup是一个很不错的函数,但是唯一遗憾的就是不能传递引数,今天突发奇想写了下面一段代码。
[jass]
function grouptest takes nothing returns nothing
    local unit u
    local group g = CreateGroup()
    local group tempg = CreateGroup()
    loop
        set u = FirstOfGroup(g)
        exitwhen u == null
            call GroupRemoveUnit(g,u)
            call GroupAddUnit(tempg,u)
            // 一段代码
  endloop
    loop
        set u = FirstOfGroup(tempg)
        exitwhen u == null
             call GroupRemoveUnit(tempg,u)
             call GroupAddUnit(g,u)
    endloop
endfunction
[/jass]

这样子可以在本函数内完成ForGroup的效果,只不过很没效率就是了。不知道大家还有什么别的方法么?

评分

参与人数 1威望 +5 收起 理由
kook + 5 鼓励讨论

查看全部评分

发表于 2008-12-1 00:11:43 | 显示全部楼层
如果是只需要用一次的Group,我都是直接FirstOfGroup循环到空的

而如果是一直需要用到的,我是这样的:
[jass]
function grouptest takes nothing returns nothing
      local unit u
      local group g = CreateGroup()
      local group tempg = CreateGroup()
      loop
            set u = FirstOfGroup(g)
            exitwhen u == null
                  call GroupRemoveUnit(g,u)
                  call GroupAddUnit(tempg,u)
                  // 一段代码
   endloop
    call DestroyGroup(g)
    set g = tempg
endfunction
[/jass]
回复

使用道具 举报

发表于 2008-12-1 00:28:05 | 显示全部楼层
话说,这个我貌似经常用的呢,懒得参数传来传去了………………
回复

使用道具 举报

 楼主| 发表于 2008-12-1 16:49:52 | 显示全部楼层
嗯,2F的代码比我的效率高一倍,但是绑定时就麻烦了。
回复

使用道具 举报

发表于 2008-12-9 13:14:13 | 显示全部楼层
很实用 受教了
回复

使用道具 举报

发表于 2008-12-9 22:30:58 | 显示全部楼层
一般是用loop循环.

不过有次试验发现.
组动作 是连续的.
同时运行多个 只会先运行完1个的组动作

所以可以在组动作前 先c2i记录下 要传递的变量
动作时 取得c2i绑定的变量
动作完再次赋值 那个变量

或者直接拿个全局来传递变量
回复

使用道具 举报

发表于 2008-12-9 22:31:18 | 显示全部楼层
上次做某分裂闪电时 试验可行
回复

使用道具 举报

发表于 2009-1-4 17:32:31 | 显示全部楼层
。。。。

T选取单位组的时候有一个条件判断

如果用firseofgroup这样的写法的话

是否是先条件为空,将范围内所有单位全部选取进去,然后一一判断做动作?

这样的话,其实效率也差不多吧

T选取的时候应该也给每一个单位做了判断吧

何来效率变低的说。
回复

使用道具 举报

发表于 2009-1-4 18:59:26 | 显示全部楼层
引用第7楼hmmm于2009-01-04 17:32发表的  :
。。。。

T选取单位组的时候有一个条件判断

如果用firseofgroup这样的写法的话
.......
单位组动作ForGroup无法直接传参数

触发里的单位组操作分两个部分,一是组成单位组,比如选择范围内单位GroupEnumUnitsInRange可以用筛选器,这里才是ls所说加条件的地方;二是做动作,对建好的单位组ForGroup。

主题讨论的明显是后一部分使用FirstOfGoup做循环能在主函数内完成组操作的例子
回复

使用道具 举报

发表于 2009-1-14 10:03:37 | 显示全部楼层
最初我用了LZ的办法

但我现在已经不用了.
把单位加入Group的时候, 不是要判断么, 那个时候就把该做的都做了, 省事
回复

使用道具 举报

 楼主| 发表于 2009-1-15 17:44:50 | 显示全部楼层
遗憾的是在用GroupEnumUnitInRange等函数时不能把本函数的局部变量传过去.....
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 17:52 , Processed in 0.073256 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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