碰撞时产生的多个对象 - Corona SDK

时间:2011-08-18 16:08:31

标签: iphone ios physics collision corona

请帮忙!我试图从天空中一个一个地生成5个球,一旦它们撞到地面或当它们击中另一个用户控制的物体时就会消失。好消息是我可以按照预期成功地产生球,但当它们击中地面(或地面上的其他用户控制的物体)时,它们不会消失。自从过去两天以来,我一直在经历大量的示例代码,但我无法弄清楚如何去做。游戏确实运行,但调试终端给我一个错误说:运行时错误 - 尝试索引全局'self'。这是源代码:

local randomBall = function()
    ball = display.newImage( "hardball.png" )
    ball.x = math.random (30, 450); ball.y = -20
    physics.addBody( ball, { density=2.9, friction=0.5, bounce=0.7, radius=24 } )
    local function whenHit (event)
        if(event.phase == "began") then
            self:removeSelf()       
        end
    end
    ball:addEventListener("collision", whenHit)
end

timer.performWithDelay( 500, randomBall, 5 )

2 个答案:

答案 0 :(得分:0)

告诉我们错误所在的那条线本来不错,但是我可以看到你的问题在函数whenHit()

它指的是变量'self',只是你永远不会定义那个变量。大概你希望这个函数充当'ball'的方法,所以函数声明应该使用冒号语法,看起来像ball:collision(event)


请注意,Corona有两种设置事件侦听器的方法。这在他们的文档中解释:http://developer.anscamobile.com/content/events-and-listeners

然后他们的文档中的这个页面解释了如何应用于碰撞事件: http://developer.anscamobile.com/content/game-edition-collision-detection

看起来你要做的是球上的一个表监听器,在这种情况下你对addEventListener的调用应该是ball:addEventListener(“collision”,ball)然后函数是ball:collision(event)

他们描述的另一种方法是全局侦听器函数,然后在函数内部使用event.object1来引用碰撞的对象。

答案 1 :(得分:0)