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

用了局部变量还是无法多人使用

[复制链接]
发表于 2011-8-15 13:17:50 | 显示全部楼层 |阅读模式
RT..............看来半桶水的技术还是不行啊........ ,此技能测试结果是2个单位同时释放的飞矛次数变成了4(我是要他连续射10次),这样子等于被平分了.........求解。

FM
    事件
        单位 - 任意单位 发动技能效果
    条件
        (施放技能) 等于 飞矛 (狂暴猎手)
    动作
        自定义代码: local unit array A_FM_DW
        自定义代码: local location A_FM_D
        自定义代码: set A_FM_DW[1] = GetSpellTargetUnit()
        自定义代码: set A_FM_DW[2] = GetTriggerUnit()
        自定义代码: set A_FM_D = GetUnitLoc(A_FM_DW[2])
        自定义代码: call PauseUnitBJ( true, A_FM_DW[2] )
        自定义代码: call SetUnitTimeScalePercent( A_FM_DW[2], 200.00 )
        For循环整数A从 1 到 10, 做动作
            Loop - 动作
                等待 0.10 秒
                自定义代码: call SetUnitAnimation( A_FM_DW[2], "Attack" )
                自定义代码: call CreateNUnitsAtLoc( 1, 'o02C', GetOwningPlayer(A_FM_DW[2]), A_FM_D, GetUnitFacing(A_FM_DW[2]) )
                自定义代码: call SetUnitAbilityLevel( bj_lastCreatedUnit, 'A0BI', GetUnitAbilityLevel(A_FM_DW[2], 'A09R') )
                自定义代码: call IssueTargetOrder( bj_lastCreatedUnit, "thunderbolt", A_FM_DW[1] )
                自定义代码: call UnitApplyTimedLifeBJ( 0.50, 'BHwe', bj_lastCreatedUnit )
        等待 0.10 秒
        自定义代码: call ResetUnitAnimation( A_FM_DW[2] )
        自定义代码: call SetUnitTimeScalePercent( A_FM_DW[2], 100.00 )
        自定义代码: call PauseUnitBJ( false, A_FM_DW[2] )
        自定义代码: call RemoveLocation( A_FM_D )
        自定义代码: set A_FM_DW[1] = null
        自定义代码: set A_FM_DW[2] = null
        自定义代码: set A_FM_D = null
原文:
FM 复制
    事件
        单位 - 任意单位 发动技能效果
    条件
        (施放技能) 等于 飞矛 (狂暴猎手)
    动作
        设置 A_FM_DW[1] = (技能施放目标)
        设置 A_FM_DW[2] = (触发单位)
        设置 A_FM_D = (A_FM_DW[2] 的位置)
        单位 - 暂停 A_FM_DW[2]
        动画 - 改变 A_FM_DW[2] 的动画播放速度为正常速度的 200.00%
        For循环整数A从 1 到 10, 做动作
            Loop - 动作
                等待 0.10 秒
                动画 - 播放 A_FM_DW[2] 的 Attack 动作
                单位 - 创建 1 个 飞矛-辅助单位 给 (A_FM_DW[2] 的所有者) 在 A_FM_D ,面向角度为 (A_FM_DW[2] 的面向角度) 度
                单位 - 设置 最后创建的单位 [R] 的 飞矛 -辅助 等级为 (A_FM_DW[2] 的 飞矛 (狂暴猎手) 技能等级)
                单位 - 对 最后创建的单位 [R] 发布 人族山丘之王 - 风暴之锤 命令到目标: A_FM_DW[1]
                单位 - 设置 0.50 秒 水元素 类型的生命周期对 最后创建的单位 [R]
        等待 0.10 秒
        动画 - 重置 A_FM_DW[2] 动作,恢复到正常状态
        动画 - 改变 A_FM_DW[2] 的动画播放速度为正常速度的 100.00%
        单位 - 恢复 A_FM_DW[2]
        点 - 清除 A_FM_D
        设置 A_FM_DW[1] = 没有单位
        设置 A_FM_DW[2] = 没有单位
发表于 2011-8-15 13:29:22 | 显示全部楼层
难道是因为那个等待0.1秒?
回复

使用道具 举报

发表于 2011-8-15 13:38:42 | 显示全部楼层
问题在循环数上,这个循环整数A是个整数变量,也就是
if A<=10  
做一遍动作后设置A=A+1

不停地循环直到A大于10为止,但是A是个全局变量,比如单位甲和乙同时使用该技能(但其实就算是同时魔兽还是会排出先后顺序)
A=1,甲循环后使得A=2,乙用的时候A已经是2了,循环后使得A=3,再之后甲使A=4,乙使A=5,……
也就相当于甲做了A=1,3,5,7,9共5次动作,同样的乙做了A=2,4,6,8,10共5次动作,这是在基本0时差的情况下

但是LZ的触发中在循环里用了两次等待,这就造成了相当大的误差,误差大概为0.05s-0.2s,虽然对人来说等于没有误差,但程序的运行时间远小于这个时差……

所以循环整数A也要换成自定义的才行
回复

使用道具 举报

发表于 2011-8-15 13:45:03 | 显示全部楼层
这个循环整数A是个整数变量
确切的说,是全局整数变量

其实,既然你的这个触发已经改得满眼自定义代码了,不如直接写转成文本写jass……
而且,转了之后你就会发现UI里的循环实现是多坑爹
回复

使用道具 举报

发表于 2011-8-15 13:48:37 | 显示全部楼层
引用第3楼zhuzeitou于2011-08-15 13:45发表的  :

确切的说,是全局整数变量

其实,既然你的这个触发已经改得满眼自定义代码了,不如直接写转成文本写jass……
而且,转了之后你就会发现UI里的循环实现是多坑爹
坑爹了…………

我明明想打“全局变量”来着。。。打成“整数变量”了。。虽然没错
回复

使用道具 举报

 楼主| 发表于 2011-8-15 17:58:02 | 显示全部楼层
感谢感谢!果然转换成文本就清晰得多了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 18:20 , Processed in 0.033344 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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