找回密码
 点一下
查看: 1777|回复: 14

关于单位组和GameCache的问题,一个异步技能问题。

[复制链接]
发表于 2008-2-28 21:08:16 | 显示全部楼层 |阅读模式
情况是这样的,需要在枚举单位组中的单位时,传递过去一个参数,以便进一步操作。但是,不知道如何获得当前的组,不知道有没有GetCurrentGroup这样的函数(类似GetTriggeringTriger()函数)。

为了把问题描述清楚,举个例子,比如要创建一些单位,把这些单位放到某个单位组中,然后枚举这些单位,最后将所枚举的单位分别移动到指定的点,问题就来啦,请参照下面的代码:


[codes=JASS]

//枚举单位组中的单位
function OnEnumUnitFromGroup takes nothing return nothing

    local location locPointTaget  //指定的点
    //指定的点locPointTaget必须有外部函数设定。
    //本来想用GameCache,但是不知道如何设定关键字,应该型如这样:
    //local group g = GetCurrentGroup() //但是好像没有GetCurrentGroup这样的函数。
    //set locPointTaget = I2LOC(GetStoredInteger( theGameCache(), I2S(H2I(g)), "Group"))

    //将枚举到的单位移动到目标点
    call SetUnitPositionLoc ( GetEnumUnit(), locPointTaget )
endfunction

//请先从这里开始看
function SomeTrigger_Action takes nothing return nothing
    local unit unitCreate
    local group gCreate = CreateGroup()
    local location locPointTaget

    //这里是其他一些代码

    //创建20个某种单位并且将它加入到特定的组中
    local int i = 0
    loop
        exitwhen i > 21
        set unitCreate = CreateUnitAtLoc(...........)
        call GroupAddUnit( gCreate, unitCreate )
        set i = i + 1
    endloop
   
    //这里是其他一些代码。其中,具有计算目标点locPointTaget的方法。

    //下面这种方式,好像行不通。
    //call StroedInteger( theGameCache(), I2S(H2I( gCreate )), "Group", H2I( locPointTaget ))

    //开始枚举组中的单位。
   call ForGroup( gCreate, function OnEnumUnitFromGroup )

endfunction
[/codes]

评分

参与人数 1威望 -10 收起 理由
沉默の罪恶 -10 3连真好~

查看全部评分

 楼主| 发表于 2008-2-28 21:22:39 | 显示全部楼层
哎呀呀,又是漫长的等待啊。高手,快来把。
回复

使用道具 举报

发表于 2008-2-28 22:02:23 | 显示全部楼层
没有那种函数~~

还有~~不要三连帖~~

你可以用缓存或者全局变量自行保存当前操作的单位组~~
回复

使用道具 举报

 楼主| 发表于 2008-2-28 22:48:01 | 显示全部楼层
哦。。。。

不过,用全局变量就不能异步发动技能了。

用游戏缓存就是我说的上面的那个问题啊。
回复

使用道具 举报

发表于 2008-2-28 22:58:05 | 显示全部楼层
如果无严格要求,且组操作里没有TriggerSleep和之类函数的话可以认为组操作是一瞬间完成,用一个全局的变量传递就可以
回复

使用道具 举报

 楼主| 发表于 2008-2-28 23:07:15 | 显示全部楼层
引用第4楼kook于2008-02-28 22:58发表的  :
如果无严格要求,且组操作里没有TriggerSleep和之类函数的话可以认为组操作是一瞬间完成,用一个全局的变量传递就可以

但是,我要做一个技能,对组内的单位进行操作。而且这个技能是持续性的,会持续某段事件,这个技能可能会有不同的单位在同一个时间段发出。那么用全局变量的话,就。。。。。。
回复

使用道具 举报

发表于 2008-2-29 11:17:03 | 显示全部楼层
那还不如去和施法单位做个对应~~

反正没人能同时放2个魔法~~
回复

使用道具 举报

 楼主| 发表于 2008-2-29 16:08:56 | 显示全部楼层
引用第6楼Renee于2008-02-29 11:17发表的  :
那还不如去和施法单位做个对应~~

反正没人能同时放2个魔法~~

是的,我就是这么做的,但是,施法单位所释放的魔法是范围性的,那就必须枚举这个区域中的敌人,枚举操作函数里面无法得到传来的参数,因为没有GameCurrentGroup函数。。。。
这个问题又回到以前了。

不如,这么说把。。。。。:

  我要做一个技能,释放单位向目标地点发出一个冰球,然后,所有这个冰球遇上的敌人都会被这个冰球吸住,(会随着冰球移动而移动),同时受到伤害。。。
  哪位高手能帮我做出这样的技能(必须要异步释放的,就是可以有不同的单位同时释放)?
  真是太期盼了。。。。
  先谢谢了。。。
回复

使用道具 举报

发表于 2008-2-29 21:15:16 | 显示全部楼层
3连打断~~

我的想法是:首先冰球是一个单位,为这个单位临时注册一个接近单位事件的触发,并附有一个单位组变量,用缓存保存
当这一事件触发时,判断单位所属如果为敌对,则加入单位组
单位移动用触发完成,枚举单位组内所有单位移动,保持同步性

以上仅为个人想法,闪~~
回复

使用道具 举报

发表于 2008-2-29 21:54:09 | 显示全部楼层
嗯,我觉得奇怪,枚举是必须在已知单位组的情况下进行,既然已经能够进行枚举单位组了,那么单位组就是已知的,为何还要去得到单位组?
回复

使用道具 举报

发表于 2008-2-29 23:53:08 | 显示全部楼层
这个做的很粗糙,不知道是不是符合lz的想法

aaa.w3x (21 KB, 下载次数: 65)
回复

使用道具 举报

 楼主| 发表于 2008-3-1 00:06:21 | 显示全部楼层
引用第9楼libla于2008-02-29 21:54发表的  :
嗯,我觉得奇怪,枚举是必须在已知单位组的情况下进行,既然已经能够进行枚举单位组了,那么单位组就是已知的,为何还要去得到单位组?

回复9楼的朋友。

那是因为,需要用该单位组的HANDLE作为关键字,来查询GameCache中的数据。。


比如要实现下面的技能:
  创建一系列的冰球,这些冰球会沿着目标方向前进,所有被这些冰球遇到的敌人,都会被吸住,会同时和冰球一起移动。

思路是:
   当一个单位释放魔法,并且释放的魔法是指定的冰球魔法。
   创建n个冰球。
   把这些冰球加入到一个组A中。
   创建一个定时器,间隔为x秒,目的是移动这些冰球。
   创建一个触发器,事件为一个冰球死亡,目的是清除这些冰球,不造成泄漏。
   以定时器handle为关键字,将魔法释放单位hanlde,目标角度、冰球组handle等数据写入GameCache。
   启动定时器。

然后,定时器里面:
    获得本定时器handle。
    以本定时器的handle为关键字获得Gamecahce冰球组的handle。
    枚举冰球组中所有的冰球。

枚举冰球的函数里面:
    获得被枚举的冰球的当前坐标,目标方向。
    计算冰球的下一个坐标点。(移动步进)
    移动该冰球。
   
    获得被枚举的冰球周围半径为r的范围内的所有敌人,同时创建一个敌人组。
    枚举敌人组中所有的敌人。

枚举敌人的函数里面:
    获得冰球的坐标,角度。魔法释放者的unit handle  //此处无法获得。。。
    移动被枚举的敌人的坐标到冰球的坐标。
    对该敌人进行伤害,设置起因为魔法释放者。



最后,在此感谢zhuzitou.
回复

使用道具 举报

 楼主| 发表于 2008-3-1 01:01:59 | 显示全部楼层
我考。。居然有这样的触发。。。哈哈哈哈。。问题解决了。

采用注册单位进入某单位的范围做为触发。。。

真是太感激zhuzitou了。。。。。。。。。。。。。。。。。。

老大。。。。。5555555。。。。。。感激涕零啊。。。。。

这样的触发,我怎么早先没有发现呢????
回复

使用道具 举报

发表于 2008-3-1 02:29:25 | 显示全部楼层
啊 没记错的话 那个是我发现的……

- -  也不能这么自私的说 其实它一直存在只是被大家无视了 呐?
回复

使用道具 举报

发表于 2008-3-1 12:07:59 | 显示全部楼层
引用第13楼小滴于2008-03-01 02:29发表的  :
啊 没记错的话 那个是我发现的……

- -  也不能这么自私的说 其实它一直存在只是被大家无视了 呐?

恩,现在想想,貌似和上次你在技能区说的那个模仿震荡波得方法差不多,呵呵,不过写的时候没有想到过喏………………

不过,现在想想,那个方法可能存在一个小小的问题,比如一个单位承受一次伤害后脱离范围,再用闪烁进去,会不会造成2次伤害??还是需要再用一个单位组记录受过伤害的单位呢??
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 05:56 , Processed in 0.098037 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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