Corona SDK在停止独立创建的对象的定时器方面遇到了问题。

我拥有一个打斗游戏,并且当一个敌人与我的角色发生碰撞时,会定时播放“击打”声音,如下所示:

local function hitSound()
local hsound = math.random(#sfx.hit)
audio.play(sfx.hit[hsound])
end

--------------------------------------------------CHARACTER COLLISION---------------

local function guyCollision(self, event)
if event.other.type == "enemy1"then

if event.phase == "began" then
hitTimer = timer.performWithDelay(500,hitSound,0)
event.other:setSequence("punch")
event.other:play()
end

if event.phase == "ended" then
timer.pause(hitTimer)
end

当我的角色一次只攻击一个敌人时,这是有效的,但如果有多个敌人(通常会出现)同时攻击我的角色并且我杀死它们后,击打声音会保持不变。另外,当我调用audio.fadeout()时,当我的角色死亡时,拳打声音不会随着其他声音/音乐一起淡出。:s

有人向我建议将定时器分配给在其表中的特定敌人,但我不确定如何做到这一点...这是最好的方法吗?我只是不知道如何获取该敌人的当前索引..非常感谢您的任何帮助!

这是我的敌人生成代码:

local spawnTable2 = {}

local function spawnEnemy()
enemy1 = display.newSprite( group, sheetE, sequenceData2 )
enemy1.x=math.random(100,1300)
enemy1.y=math.random(360,760)
enemy1.gravityScale = 0
enemy1:play()
enemy1.type="coin"
enemy1.objTable = spawnTable2
enemy1.index = #enemy1.objTable + 1
enemy1.myName = "enemy" .. enemy1.index
physics.addBody( enemy1, "kinematic",{ density = 1.0, friction = 0.3, bounce = 0.2 })
enemy1.isFixedRotation = true
enemy1.type = "enemy1"
enemy1.enterFrame = moveEnemy
Runtime:addEventListener("enterFrame",enemy1)
enemy1.objTable[enemy1.index] = enemy1
return enemy1
end
点赞
用户1870706
用户1870706

我认为你的问题可能是hitTimer变量被覆盖,你只能取消最后一个。你可以尝试使用:self.hitTimer进行改进。

Rob

2014-01-27 02:31:23