碰撞功能未运行

时间:2014-03-21 18:20:47

标签: lua corona

我创建了3个气球(只需要3个),每个气球都包含一个特定的单词,其中一个单词是正确的答案。我从大炮射击球并击中气球。假设气球3保持balloonText3,这是正确的答案,如果我击中球并且文本消失。由于某种原因,ballCollision(事件)没有运行,我使用print语句来确认它。这有什么不对吗?

local cannonBalls = display.newGroup()
...

local shot = function(event)
    if(event.phase == 'ended') then

        Runtime:removeEventListener('enterFrame', charge)
        cannon.isVisible = true
        cannon.rotation = 0

        cannonBall = display.newImage('cannon ball.png', 84, 220)
        physics.addBody(cannonBall, {density = 1, friction = 0, bounce = 0})
        cannonBalls:insert(cannonBall)
        print ('shot')

-- Shoot cannon ball
cannonBall:applyLinearImpulse(3, impulse, cannonBall.x, cannonBall.y )

--Collision listener
print('event listener')
cannonBall:addEventListener ('collision', ballCollision)

    end
end

function ballCollision(event)
   if (event.other.name =='balloon3') then
        scene.updateScore()
        print('Ball is colliding')
        timer.performWithDelay(1, e.target.removeSelf, e.target) 
        timer.performWithDelay(1, e.other.removeSelf,  e.target) 

        balloonText3.isVisible = false 
        audio.play(pop)
    end
end
function scene:createScene(event)
local group = self.view
...

local balloon1 = display.newImage ('balloon_fat_red.png', 495, 60)
local balloon2 = display.newImage ('balloon_fat_red.png', 495, 115)
local balloon3 = display.newImage ('balloon_fat_red.png', 495, 160)

group:insert(balloon1)
group:insert(balloon2)
group:insert(balloon3)

physics.addBody(balloon1)
physics.addBody(balloon2)
physics.addBody(balloon3)

balloon1.bodyType = 'static'
balloon2.bodyType = 'static'
balloon3.bodyType = 'static'

table.insert(balloons, balloon1)      
table.insert(balloons, balloon2)      
table.insert(balloons, balloon3) 

local balloonText1 = display.newText('\227\129\130', 495, 60)
balloonText1:setFillColor( 1,1, 0 )
local balloonText2 = display.newText('\227\129\132', 495, 115)
balloonText2:setFillColor( 1,1, 0 )
local balloonText3 = display.newText('\227\129\134', 495, 160)
balloonText3:setFillColor( 1,1, 0 )


group:insert(balloonText1)
group:insert(balloonText2)
group:insert(balloonText3)



end

1 个答案:

答案 0 :(得分:0)

我将假设你将print语句放在if的{​​{1}}块中,因为我看不到监听器注册的任何其他错误。此外,我没有在代码中看到您设置气球对象的name属性的任何位置。所以要么

  • 在设置ballCollision
  • 后添加balloon3.name = "balloon3"(类似地为1和2)

或(可能更简单)

  • 在碰撞处理程序中使用bodyType。你不需要围绕Lua条件的括号。