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

一个严重的timer问题

[复制链接]
发表于 2009-3-22 22:49:13 | 显示全部楼层 |阅读模式
我6个月来写的代码因重装系统什么都没了…于是在玩以前的图的时候遇到一个严重的问题,有跳跃及月神箭两个技能,前者j后vj,也就是前者没用到任何全局变量,在游戏中会出现改变单位飞行高度的函数突然中止,移动单位(白虎跳跃和月箭)的timer没运行
由于重装系统所以优化前的图没有了...我只有从优化后的图里面查看代码,下面贴出跳跃的代码:

[jass]function I00OI takes nothing returns nothing
local timer t=GetExpiredTimer()
call SetUnitFlyHeight(OI1O((I2S(I1IO((t)))),"unit"),.0,666.67)
call O01O((I2S(I1IO((t)))))
call DestroyTimer(t)
set t=null
endfunction
function I000I takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit u=OI1O((I2S(I1IO((t)))),"unit")
local real I001I=OI0O((I2S(I1IO((t)))),"facing")
local real O010=OI0O((I2S(I1IO((t)))),"distance")-20.
call SetUnitX(u,O00O(GetUnitX(u)+CosBJ(I001I)*20.))
call SetUnitY(u,O11O(GetUnitY(u)+SinBJ(I001I)*20.))
call SetUnitFacing(u,I001I)
call OIOO((I2S(I1IO((t)))),"distance",O010)
if O010<=0 then
call O01O((I2S(I1IO((t)))))
call DestroyTimer(t)
call SetUnitPathing(u,true)
call SetUnitAnimation(u,"stand")
endif
set t=null
endfunction
function I01II takes nothing returns nothing
local unit u=GetTriggerUnit()
local timer t=CreateTimer()
local timer t2=CreateTimer()
call UnitAddAbility(u,1097691750)
call UnitRemoveAbility(u,1097691750)
call SetUnitFlyHeight(u,200.,666.67)
call IssueImmediateOrder(u,"stop")
call SetUnitAnimationByIndex(u,6)
call OIOO((I2S(I1IO((t)))),"facing",GetUnitFacing(u))
call OIIO((I2S(I1IO((t)))),"unit",u)
call OIIO((I2S(I1IO((t2)))),"unit",u)
call OIOO((I2S(I1IO((t)))),"distance",600.)
call SetUnitPathing(u,false)
call TimerStart(t,.02,true,function I000I)
call TimerStart(t2,.3,false,function I00OI)
endfunction
function I01OI takes nothing returns nothing
set OOO=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(OOO,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(OOO,Condition(function I00II))
call TriggerAddAction(OOO,function I01II)
endfunction[/jass]
那个Condition就是判断施放的技能是否是跳跃。
我又重新看了一下这段代码,应该没有错才对啊。
 楼主| 发表于 2009-3-22 22:58:51 | 显示全部楼层

一个严重的timer问题

这就出现了白虎停在空中和射出的箭不动就停在原地。但这种情况会恢复正常。重新射的箭和跳跃又正常了。按理说同一段代码(施跳跃技能就执行)执行的效果应该一样啊,怎么会出现这样的问题?
字数限制请允许2连
回复

使用道具 举报

发表于 2009-3-22 23:02:23 | 显示全部楼层
你发表的内容超过5W字了么?

哪里来的字数限制?

或许只是初始化的问题

另,发帖为何不选分类
回复

使用道具 举报

 楼主| 发表于 2009-3-22 23:13:47 | 显示全部楼层
...弱弱地说声因为不能选分类…以前会自动选成求助的…电脑上貌似不选分类不能发吧?明天去学校改…
回复

使用道具 举报

发表于 2009-3-22 23:22:49 | 显示全部楼层
手机上发帖可能会是这样的,所以现在我手机上ga使用的是opera mini,这样可以和电脑上差不多的浏览ga,不过流量也增加了
回复

使用道具 举报

发表于 2009-3-23 09:14:54 | 显示全部楼层
j后vj,也就是前者没用到任何全局变量
《----------vj是会用到全局变量的。。。因为他的结构体本身就是一堆数组
而且,j没用到全局变量的话,vj呢。。
回复

使用道具 举报

 楼主| 发表于 2009-3-23 13:04:43 | 显示全部楼层
我想说的是,改变单位飞行高度的函数是WAR3自身提供的,比如改变为600时间1秒,但有时会突然中止,移动单位的timer有时也没正常启动,如跳跃以及箭的移动,这些都是和timer有关的,事实上VJ的那段代码也没问题,强调只是说问题不在这里
回复

使用道具 举报

发表于 2009-3-23 13:17:33 | 显示全部楼层
vj的那段代码没有问题《---如果你确定没有问题,那么为什么来这里发贴呢?
会出问题就肯定是有问题的,只是之前你没发现而已。
回复

使用道具 举报

 楼主| 发表于 2009-3-23 13:26:20 | 显示全部楼层
那么就撇开vj,跳跃的代码很简单,一个单位施放跳跃,执行在x秒内改变单位飞行高度到300,并创建2个timer,一个控制单位向前,一个在n秒后执行在x秒内改变单位高度到0。有时出现那2个timer没正常运行
回复

使用道具 举报

发表于 2009-3-23 16:00:26 | 显示全部楼层
那么我给一个建议,不要用XX时间改变XX高度,每一次改变位置时改变手动高度(就是用时0秒),高度按抛物线公式,这样去试试呢
回复

使用道具 举报

 楼主| 发表于 2009-3-23 22:17:19 | 显示全部楼层
为什么移动单位的timer也没有正常运行呢?也就是timer中的动作全部没有执行,相当诡异呢。会不会与优化地图的软件有关呢?
回复

使用道具 举报

发表于 2009-3-23 22:17:55 | 显示全部楼层
那你回到没有优化的地图中试试看呢?
回复

使用道具 举报

发表于 2009-3-23 23:52:41 | 显示全部楼层
移动单位(白虎跳跃和月箭)的timer<---如果这两个东西用的是一个timer那么有可能不被运行
症状:先发射箭再跳,而跳到一半的时候箭没了
当然,不知到优化器是不是把handle数组化了
回复

使用道具 举报

发表于 2009-3-24 13:27:51 | 显示全部楼层
你代码不发出来 谁知道呢
回复

使用道具 举报

 楼主| 发表于 2009-3-27 19:54:27 | 显示全部楼层
还是把图传上吧..

new_WarofArrow1.1.w3x

53 KB, 下载次数: 8

这是地图,如果想直接看j文件就看下面那个

war3map.rar

70 KB, 下载次数: 7

这是j文件,因为上传后缀的限制,下了之后改回来吧

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 12:43 , Processed in 0.090701 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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