我在游戏中有一组对象是传感器(我们将它们统称为对象1)。当它与我的主对象(object2)发生碰撞时,得分增加10.但是,在每次后续重新启动场景(而不是整个游戏)之后,object1和object2之间的每次碰撞都会复制自身,然后重复三次等等。
因此,对于场景的第一次运行,object1与object2碰撞一次(我知道这是因为每次2个对象碰撞时我都有一个print语句)。第二次碰撞两次,第三次碰撞三次,依此类推。我认为我没有删除传感器的某些功能,但我无法弄清楚它是什么。如果出现问题,如何正确删除对象?
我在碰撞时删除object1的代码:
local function onCollision( self,event )
if(event.object2.name == "bonus")then--if we hit a bonus ball
event.object2:removeSelf()--removes the bonus ball object from the scene
print("bonus collided")
display.remove(event.object2)
game.addToScore(10)--adds a value of 10 to the score
scoreText.text = game.returnScore()
Runtime:removeEventListener("enterFrame", event.object2)
else
composer.gotoScene("restart")
Runtime:removeEventListener("touch", onObjectTouch)
end
end
答案 0 :(得分:0)
我研究了你的代码,简而言之就是问题
ball.collision = onCollision
它位于scene:show
下,因此每次到场景时都会创建一个新的eventListener。它并未在scene:hide
下删除。
基本上你的一半代码并没有真正做任何事情。例如,您删除相同的项目两次,将Runtime侦听器添加到对象(而不是函数),并且您尝试删除此运行时侦听器。例如,这会尝试删除甚至不存在的显示对象上的Runtime事件侦听器:
Runtime:removeEventListener( "collision", circle )
您需要做的是:
scene:create
scene:create