我的应用经常会抛出以下错误:
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分之一。
答案 0 :(得分:0)
我认为这与你的事件监听器有关。我有时会发现Corona事件监听器在场景发生变化后仍然可以运行。我猜测在事件监听器停止之前球被清理(移除),并且在监听器被清理之前,监听器仍然一直在运行
要解决此问题,您可以尝试
只需在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然后
我不完全确定为什么会这样,但我猜是电晕正在删除显示对象属性而不是对象本身。