Android 随机错误经常发生:尝试将nil与number进行比较

Android 随机错误经常发生:尝试将nil与number进行比较,android,ios,lua,sdk,coronasdk,Android,Ios,Lua,Sdk,Coronasdk,我的应用经常会抛出以下错误: 游戏性。lua:121:尝试将零与数字进行比较 该函数将对象从屏幕右侧移动到左侧。当它离开屏幕50像素时,对象应该被移除。以下是我的方法代码: function moveObject(self,event) if (self.x)<-50 then --this is line 121 --remove object Runtime:removeEventListener("enterFrame

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

游戏性。lua:121:尝试将零与数字进行比较

该函数将对象从屏幕右侧移动到左侧。当它离开屏幕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

你知道会发生什么吗?这种错误很少发生,可能15分之一会发生。

我认为这与您的事件侦听器有关。我有时发现,在科罗纳,即使场景发生了变化,事件监听器仍然在运行。我猜想,在事件侦听器停止之前,球已被清理(移除),并且在清理侦听器之前,侦听器仍在运行

要解决这个问题,你可以试试

  • 首先删除侦听器,然后删除ball
  • 只需在if检查之前添加null检查

    如果(self~=null)那么
    
    if(self.x)我解决了一个类似的问题,不仅检查了“self”是否为零,还检查了“self.x”是否为零。所以

    如果self~=nil和self.x~=nil和self.x<-50,则


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

    是的,我理解这个错误,但我想知道如何修复它。谢谢Lua中的
    null
    ->
    nil
    。我也会用同样的语句来写:
    if(self~=nil)和(self.x<-50)
    。Lua首先检查第一个条件,只有当它为真时,它才会检查第二个条件,即,它无法检查第二个条件self.x,如果第一个条件self为零,则未满足..我尝试实现该想法,但不幸的是,问题仍然存在。
        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 )
    
    if (self ~= null) then
    if (self.x)<-50 then --this is line 121
            --remove object
            Runtime:removeEventListener("enterFrame", event.self)
            display.remove(event.target)