请帮忙!我试图从天空中一个一个地生成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 )
答案 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)