Corona“试图移除一个已经被移除的对象”的错误提示。

我正在制作一个简单的“打砖块”游戏,但我在重新加载地图时遇到了问题。 例如:如果我开始第1关,打碎了一些砖块并输了,然后我再次加载同样的地图。下一次当球与我之前“碰过”的相同砖块碰撞时,会给我一个错误“尝试删除已经删除的对象”

local map = lime.loadMap("maps/" .. currentLevel .. ".tmx")  // 加载地图
local layer = map:getTileLayer("bricks_1")  // 获取砖块层
local visual = lime.createVisual(map)  // 创建视觉地图
local physical = lime.buildPhysical(map)  // 创建物理地图

function removeBricks(event)  // 移除砖块
    if event.other.isBrick then  // 如果是砖块
        local brick = event.other  // 获取砖块
        transition.to(brick, {time = 20, alpha = 0})  // 动画渐变消失

        score = score + brick.scoreValue  // 增加分数
        ScoreNum.text = score  // 更新分数文本

        -- remove brick
        brick:removeSelf()  // 移除砖块
        brick = nil
        ...
点赞
用户1605727
用户1605727

你尝试过这个吗?

transition.to(brick, {time = 20, alpha = 0, onComplete = function()
    if brick then
        brick:removeSelf()
        brick = nil
    end
end})
2013-06-27 00:30:08
用户1682268
用户1682268

我认为第二次进入游戏时,事件 .other 没有被创建。如果您正在使用故事板,您可以尝试在游戏结束后删除场景,这样当您再次进入游戏时,它将重新创建所有对象。

 i think the second time you go to your game the event.other is not created are you using storyboard if so you can try to remove the scene after the game is over so when you go to your game again it will recreate all the object
2013-06-27 00:36:58
用户1870706
用户1870706

如果你在使用物理引擎,你在删除对象本身之前也需要执行 physics.removeBody(brick) 命令,这样它才能从物理引擎中解除。如果不这样做,物理引擎会认为对象仍然存在。

2013-07-01 00:36:14