【问题标题】:Random error occurs every so often: attempt to compare nil with number Corona SDK随机错误经常发生:尝试将 nil 与数字 Corona SDK 进行比较
【发布时间】:2016-04-22 10:00:21
【问题描述】:

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

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 次中有 1 次发生。

【问题讨论】:

  • 是的,我理解错误,但我想知道如何修复它。谢谢

标签: android ios lua sdk coronasdk


【解决方案1】:

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

要修复它,你可以尝试

  1. 首先移除监听器,然后是球
  2. 只需在 if 检查之前添加一个空检查

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

【讨论】:

  • null -> nil 在 Lua 中。
  • 我也会把它写在同一个语句中:if (self ~= nil) and (self.x &lt; -50)。 Lua首先检查第一个条件,只有当它为真时才会检查第二个条件,即没有办法检查第二个条件self.x,如果第一个条件self为nil,不满足..跨度>
  • 我尝试实现这个想法,但不幸的是问题仍然存在。
【解决方案2】:

我解决了一个类似的问题,不仅检查“self”是否为 nil,还检查“self.x”是否为 nil。所以...

如果 self ~= nil and self.x ~= nil and self.x

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

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多