我有一个节拍游戏,如果敌人与我的角色发生碰撞,定时器会播放“拳击”声音,如下所示:
local function hitSound()
local hsound = math.random(#sfx.hit)
audio.play(sfx.hit[hsound])
end
----------------------------------------------- ---字符碰撞---------------
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
答案 0 :(得分:1)
我认为你的问题是你的hitTimer变量可能被覆盖了,你只能取消最后一个。你可能会这样做:self.hitTimer来绕过它。
罗布