2014-01-26 40 views
0

我有一拍举起手来游戏,如下图所示,如果敌人与我的性格碰撞的“冲”的声音在计时器上打出:科罗娜SDK催生对象

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 

当我的角色正在下降只是一个敌人的同时也能正常工作,但如果有一个以上的催生敌人(其中有通常是)当我杀死他们的冲击声r时与我的角色战斗emains。 另外,当我呼叫audio.fadeout()时,我的角色死亡拳击声音不会与其他声音/音乐淡出:s

有人建议我分配计时器使用它的特定敌人索引在表中,但我不确定如何做到这一点...这是最好的方式吗?我只是不知道如何获得enemys目前的指数..任何帮助非常感谢!

继承人我的敌人产卵代码:

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 

回答

1

我觉得你的问题是,你的hitTimer变量可能被覆盖,并且您只能取消最后一个。你可能可以这样做:self.hitTimer来解决它。

Rob

+0

感谢抢劫,self.timer没有工作,因为碰撞是在主角上,而不是敌人。我通过使用event.other.timer和timer.cancel(event.other.timer)来实现它。我现在遇到的问题是当我的角色死亡和audio.fadeOut被称为冲孔不会淡出。我已经尝试设置enemy1.timer = nil和timer.cancel(enemy1)(发生错误),但它仍然播放,当我暂停游戏和audio.pause被称为冲孔没有暂停,ive got aroundthis bu setting主音量为零,但这是不可行的,当我的角色死亡..任何建议? – user3059109

+0

顺便说一句,当我的角色死亡时,我停止enemiess产卵,所以新的碰撞不是问题 – user3059109