电晕传感器物体未正确移除
Corona sensor object not removing properly
我在游戏中有一组对象是传感器(我们将它们统称为对象 1)。当它与我的主要对象 (object2) 碰撞时,分数增加 10。但是,在随后每次重新启动场景(不是整个游戏)之后,object1 和 object2 之间的每次碰撞都会复制自身,然后重复三次,依此类推。
所以对于场景的第一个 运行,object1 与 object2 碰撞一次(我知道这一点是因为每次这两个对象碰撞时我都有一个打印语句)。第二次碰撞两次,第三次碰撞三次,依此类推。我想我不会删除传感器的某个功能,但我无法弄清楚它是什么。如果这是问题所在,我该如何正确移除对象?
我在碰撞时移除 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
我研究了你的代码,简而言之,这就是问题所在
ball.collision = onCollision
它位于 scene:show
下,因此每次您进入场景时都会创建一个新的 eventListener。而且它不会在 scene:hide
.
下被删除
基本上你的一半代码实际上没有做任何事情。例如,您两次删除相同的项目,将运行时侦听器添加到对象(而不是函数),并且您试图删除这个运行时侦听器。例如,这会尝试删除甚至不存在的显示对象上的运行时事件侦听器:
Runtime:removeEventListener( "collision", circle )
您需要做的是:
- 创建
scene:create
下的所有对象和监听器
- 使用本地碰撞处理(即不是运行时侦听器):https://docs.coronalabs.com/daily/guide/physics/collisionDetection/index.html#local-collision-handling
- 重写您的代码,使您在
scene:create
之外拥有函数和侦听器
我在游戏中有一组对象是传感器(我们将它们统称为对象 1)。当它与我的主要对象 (object2) 碰撞时,分数增加 10。但是,在随后每次重新启动场景(不是整个游戏)之后,object1 和 object2 之间的每次碰撞都会复制自身,然后重复三次,依此类推。
所以对于场景的第一个 运行,object1 与 object2 碰撞一次(我知道这一点是因为每次这两个对象碰撞时我都有一个打印语句)。第二次碰撞两次,第三次碰撞三次,依此类推。我想我不会删除传感器的某个功能,但我无法弄清楚它是什么。如果这是问题所在,我该如何正确移除对象?
我在碰撞时移除 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
我研究了你的代码,简而言之,这就是问题所在
ball.collision = onCollision
它位于 scene:show
下,因此每次您进入场景时都会创建一个新的 eventListener。而且它不会在 scene:hide
.
基本上你的一半代码实际上没有做任何事情。例如,您两次删除相同的项目,将运行时侦听器添加到对象(而不是函数),并且您试图删除这个运行时侦听器。例如,这会尝试删除甚至不存在的显示对象上的运行时事件侦听器:
Runtime:removeEventListener( "collision", circle )
您需要做的是:
- 创建
scene:create
下的所有对象和监听器 - 使用本地碰撞处理(即不是运行时侦听器):https://docs.coronalabs.com/daily/guide/physics/collisionDetection/index.html#local-collision-handling
- 重写您的代码,使您在
scene:create
之外拥有函数和侦听器