找回密码
 点一下
查看: 5067|回复: 59

创建了一群 单位,对他们发动移动命令阵型的问题

[复制链接]
发表于 2008-8-22 18:28:38 | 显示全部楼层 |阅读模式
按阵型创建了一群 单位,对他们发动移动命令,结果阵型乱了....可能是太挤了的缘故....

我有关碰撞和设为飞行单位,还是要乱.怎么办呢?
发表于 2008-8-22 19:07:44 | 显示全部楼层
阵型?
魔兽你是不能保持阵型的吧
回复

使用道具 举报

发表于 2008-8-22 19:08:53 | 显示全部楼层
在平地上是可以保持阵型的!!!
回复

使用道具 举报

发表于 2008-8-22 19:10:40 | 显示全部楼层
一攻击也就散架了吧
回复

使用道具 举报

发表于 2008-8-22 19:13:28 | 显示全部楼层
废话!

楼主要的是在移动时保持阵型好吧,再说了,你见过哪个游戏近战单位攻击时还能保持阵型的?
回复

使用道具 举报

恶声恶气 该用户已被删除
发表于 2008-8-22 19:14:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-8-22 19:16:27 | 显示全部楼层
引用第5楼jhonny于2008-08-22 19:14发表的  :
SC2能够保持么

演示视频里面反正是没有
回复

使用道具 举报

 楼主| 发表于 2008-8-22 19:16:42 | 显示全部楼层
天,我的意思是像dota里面的希瓦一样,像冰环一样的技能,围者一个单位按圆形创造冰环单位,然后按着阵型角度像外移动,看起来就像向外扩散的圆形波一样.......但是我移动他们他们就有点乱了...
回复

使用道具 举报

发表于 2008-8-22 19:17:32 | 显示全部楼层
...
这个是阵型问题么...
用极点坐标不断移动单位就是了
回复

使用道具 举报

恶声恶气 该用户已被删除
发表于 2008-8-22 19:17:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-8-22 19:20:09 | 显示全部楼层
引用第7楼akasha于2008-08-22 19:16发表的  :
天,我的意思是像dota里面的希瓦一样,像冰环一样的技能,围者一个单位按圆形创造冰环单位,然后按着阵型角度像外移动,看起来就像向外扩散的圆形波一样.......但是我移动他们他们就有点乱了...

唉,好像是某位语文老师的语文没学好~~~~~~
回复

使用道具 举报

 楼主| 发表于 2008-8-22 19:43:47 | 显示全部楼层
用极点坐标不断移动单位就是了 是怎么移动?

我用的RB+TIMER .035设置单位X,Y轴,但是比DOTA里面卡一些

所以就想是不是哪里不对..

总的来说还是比较流畅,但是感觉比DOTA卡一点点,怎么办啊
回复

使用道具 举报

 楼主| 发表于 2008-8-22 19:46:02 | 显示全部楼层
另外,总共创建了48个单位,每.02秒的话在我的测试机上就更卡了,但是在家里的电脑测试没感觉
回复

使用道具 举报

发表于 2008-8-22 19:46:46 | 显示全部楼层
把代码发上来
回复

使用道具 举报

发表于 2008-8-22 23:04:25 | 显示全部楼层
[jass]

function JHFilter takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_U_temp))and GetUnitAbilityLevel(GetFilterUnit(),'A001')==0 and GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>1 and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false
endfunction
function removeJH takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u = ConvertUnit( GetStoredInteger(CacheValue(), HandleName(t), "UTG"))
    call UnitRemoveAbility( u, 'A001' )
    call FlushStoredMission( CacheValue(), HandleName(t) )
    call DestroyTimer( t )
    set t = null
endfunction

function JHActions takes nothing returns nothing
    local timer tt = CreateTimer()
    local location p = GetUnitLoc(GetEnumUnit())
    call UnitAddAbility( GetEnumUnit(), 'A001' )
    call AddSpecialEffectLocBJ( p, "Abilities\\\\Spells\\\\Undead\\\\FrostNova\\\\FrostNovaTarget.mdl" )
    call DestroyEffect( GetLastCreatedEffectBJ() )
    call RemoveLocation(p)
    set p = null
    call UnitDamageTarget( udg_U_temp2, GetEnumUnit(), 200.00, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
    call StoreInteger( CacheValue(), HandleName(tt), "UTG", ConvertHandleInt(GetEnumUnit()) )
    call TimerStart( tt, 3 , false, function removeJH )  
    set tt = null
    //call UnitRemoveAbility( GetEnumUnit(), 'A001' )
endfunction
function boo takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u1 = ConvertUnit( GetStoredInteger(CacheValue(), HandleName(t), "UTG") )
    local unit u2 = ConvertUnit( GetStoredInteger(CacheValue(), HandleName(t), "UBOO"))
    local integer cs =  GetStoredInteger(CacheValue(), HandleName(t), "INT")
    local real angle = 0
    local real tempX = 0
    local real tempY = 0
    local boolexpr lCheck=Condition(function JHFilter)   
    local group lGroup=CreateGroup()
    set angle =  GetUnitFacing(u2)
    set tempX = GetUnitX( u2 ) + 23 * Cos( (3.14159/180) * angle  )
    set tempY = GetUnitY( u2 ) + 23 * Sin( (3.14159/180) * angle  )
    call SetUnitX( u2, tempX )
    call SetUnitY( u2, tempY )
    set cs = cs + 23
    set udg_U_temp = u1
    call GroupEnumUnitsInRange(lGroup,tempX,tempY,90,lCheck)
    if(IsUnitGroupEmptyBJ(lGroup) == false) then
    set udg_U_temp2 = u1
    call ForGroupBJ(lGroup,function JHActions)
    endif
    call DestroyGroup(lGroup)
    set lGroup = null
    call StoreInteger( CacheValue(), HandleName(t), "INT", cs )
    if(cs>546) then
    call KillUnit(u2)
    call FlushStoredMission( CacheValue(), HandleName(t) )
    call DestroyTimer( t )
    endif
    set t = null
    set u1 = null
    set u2 = null
endfunction



function JHCheck takes nothing returns boolean
    return GetSpellAbilityId()=='Aroa'
endfunction
function Trig_NewTrigger_001_Actions takes nothing returns nothing
    local timer t
    local integer xunhuan = 0
    local location p2 = GetUnitLoc(GetTriggerUnit())
    local real angle
    loop
    exitwhen xunhuan > 47
        set t = CreateTimer()  
        set angle = ( ( I2R(xunhuan) + 1 ) * 7.5 )
        call CreateNUnitsAtLoc( 1, 'ewsp', GetOwningPlayer(GetTriggerUnit()), p2, angle )
        set xunhuan = xunhuan + 1
        call StoreInteger( CacheValue(), HandleName(t), "UTG", ConvertHandleInt(GetTriggerUnit()) )  
        call StoreInteger( CacheValue(), HandleName(t), "UBOO", ConvertHandleInt(GetLastCreatedUnit()) )
        call StoreInteger( CacheValue(), HandleName(t), "INT", 0 )
        call TimerStart( t, .03, true, function boo )  
        set t = null
    endloop
    call RemoveLocation(p2)
    set p2 = null
endfunction

//===========================================================================
function InitTrig_NewTrigger_001 takes nothing returns nothing
    set gg_trg_NewTrigger_001 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_NewTrigger_001, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition(gg_trg_NewTrigger_001,Condition(function JHCheck))
    call TriggerAddAction( gg_trg_NewTrigger_001, function Trig_NewTrigger_001_Actions )
endfunction

[/jass]
回复

使用道具 举报

 楼主| 发表于 2008-8-22 23:06:54 | 显示全部楼层
发了。
回复

使用道具 举报

发表于 2008-8-23 00:40:13 | 显示全部楼层
1 timer一个就够了
2 没考虑每个单位只能受到一次伤害
3 BJ函数很多
回复

使用道具 举报

 楼主| 发表于 2008-8-23 09:08:05 | 显示全部楼层
那个,是有考虑每个单位只受一次伤害的....local boolexpr lCheck=Condition(function JHFilter)      的
JHFilter不知道为什么发掉了,里面有考虑到,测试的时候一个单位只受到一次伤害是通过了的

另外,就算没有伤害效果,只是移动单位创造视觉上的效果,还是比DOTA卡,这个移动单位必须每个单位创造一个即使器吧?因为我不知道怎么用缓存保存单位数组,不能一个即使器里面用FOR做48次...另外如果用单位组的话,就会更卡....
回复

使用道具 举报

 楼主| 发表于 2008-8-23 11:11:10 | 显示全部楼层
难道for48次缓存所有的单位?那样的硬盘读写会更慢吧?
回复

使用道具 举报

发表于 2008-8-23 12:51:03 | 显示全部楼层
用单位组绑定计时器
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-21 06:17 , Processed in 0.299978 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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