2011-08-18 54 views
1

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

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

跨张贴在这里:http://gamedev.stackexchange.com/q/16153/9338 – sylvanaar

回答

0

告诉我们哪一行的错误是在本来不错,但我可以看到你的问题是在功能whenHit()

它指的是一个可变的“自我”只有你永远不会定义这个变量。想必你想要的功能,充当“球”的方法,这样的函数声明应该使用冒号语法和看起来像球:碰撞(事件)


需要注意的是日冕有设置事件侦听器的两种方法。它在这里解释了他们的文档中: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在函数内部引用碰撞的对象。

+0

非常感谢您的回复,我不提道歉电话号码。终端显示错误在self:removeSelf(); 这5个球只是由randomBall函数产生的,所以我仍然无法弄清楚问题所在。请问您可以在这里为我发布一些代码或示例吗? –

+0

似乎问题在于randomBall函数本身。如果我在randomBall函数外部放置球:addEventListener(“collision”,whenHit)并试图在一个名为whenHit的新函数中碰到地面时立即移除每个球,终端向我显示“ball”是一个零值,并且球也不会消失。请帮助 –

+0

“ball”在randomBall()函数内部定义,因此对“ball”的任何引用(例如对ball:addEventListener的调用)也需要位于randomBall()内部。我不知道你为什么认为这会帮助把外面的东西。我不确定为什么你认为这个问题与randomBall()函数有关;我已经说过这个问题是与whenHit()。具体来说,有错误的行在whenHit() – jhocking