碰撞函数未运行。

我制作了3个气球(只需要3个),每个气球都含有一个特定的单词,其中一个单词是正确答案。我从大炮中射出一个球并击中了气球。假设气球3包含正确答案的balloonText3,如果我击中它,球和文本就会消失。出于某种原因,ballCollision(事件)不运行,我使用打印语句来确认它。这里有什么问题?

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')

--射击火炮弹球
cannonBall:applyLinearImpulse(3, impulse, cannonBall.x, cannonBall.y )

--碰撞监听器
print('事件监听器')
cannonBall:addEventListener ('collision', ballCollision)

    end
end

function ballCollision(event)
   if (event.other.name =='balloon3') then
        scene.updateScore()
        print('球正在碰撞')
        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
点赞
用户869951
用户869951

我假设你把打印语句放在了 ballCollision 函数的 if 语句块中,因为我没有看到别的地方注册监听器出了问题。此外,我也没看到在代码中你设置气球对象的 name 属性的地方。因此,你可以:

  • 在设置 bodyType 后添加 balloon3.name = "balloon3"(并对 1 和 2 同样操作),或者(可能更简单)
  • 在碰撞处理函数中使用 if event.other == balloons[3] then ...。在 Lua 中,你不需要在条件周围添加圆括号。
2014-03-21 21:34:43