每隔一段时间就会出现随机错误:尝试将nil与数字Corona SDK

时间:2016-01-17 01:58:53

标签: android ios lua sdk corona

我的应用经常会抛出以下错误:

gamePlay.lua:121:尝试将nil与数字进行比较

该功能将对象从屏幕右侧移动到左侧。当它离屏幕50像素时,该对​​象应该删除。这是我的方法代码:

function moveObject(self,event)

        if (self.x)<-50 then --this is line 121
            --remove object
            Runtime:removeEventListener("enterFrame", event.self)
            display.remove(event.target)

        else
            self.x = self.x-self.speed --move object left at value speed
        end
    end

调用此方法时会弹出错误并进入重新启动屏幕:

------当球击中另一个物体时,请重新启动场景------------

    local function onCollision( self,event )

        if(event.object2.name == "bonus")then--if we hit a bonus ball
            event.object2:removeSelf()

            --set score
            local currentScore =game.returnScore()
            game.setScore(currentScore*2)
            scoreText.text = game.returnScore()

            Runtime:removeEventListener("enterFrame", event.object2)

        else                

            composer.gotoScene("restart")   
            Runtime:removeEventListener("touch", onObjectTouch)    
        end
    end
    ball.collision = onCollision
    Runtime:addEventListener( "collision", ball )

任何想法可能会发生什么?很少发生错误,可能是15分之一。

2 个答案:

答案 0 :(得分:0)

我认为这与你的事件监听器有关。我有时会发现Corona事件监听器在场景发生变化后仍然可以运行。我猜测在事件监听器停止之前球被清理(移除),并且在监听器被清理之前,监听器仍然一直在运行

要解决此问题,您可以尝试

  1. 首先删除侦听器,第二个球
  2. 只需在if check

    之前添加空检查
    if (self ~= null) then
    if (self.x)<-50 then --this is line 121
            --remove object
            Runtime:removeEventListener("enterFrame", event.self)
            display.remove(event.target)
    

答案 1 :(得分:0)

我已经解决了类似的问题,不只是检查“self”是否为nil,而是检查“self.x”是否为nil。所以......

如果self~ = nil且self.x~ = nil且self.x&lt; -50然后

我不完全确定为什么会这样,但我猜是电晕正在删除显示对象属性而不是对象本身。