在Lua(Corona Lab)中尝试将nil与数字错误进行比较

时间:2016-11-06 08:00:09

标签: lua corona

我对Corona(Lua)完全不熟悉。运行游戏后,游戏似乎完美无缺,直到几秒钟后我收到以下错误:'尝试将数字与数字进行比较'

本地功能gameLoop()

-- create new asteroids
createAsteroid()

-- remove asteroids which have been drifted off the screen
for i = #asteroidsTable, 1, -1 do
    local thisAsteroid = asteroidsTable [i]

    if (thisAsteroid.x < -100 or
        thisAsteroid.x > display.contentWidth  + 100 or
        thisAsteroid.y < -100 or
        thisAsteroid.y > display.contentHeight + 100 )

    then 

        display.remove( thisAsteroid )
        table.remove( asteroidsTable)

    end

end

如上所示,'thisAsteroid'位于'asteroidsTable = {}'中,它被定义为模块顶部的变量和任何函数的OUTSIDE。

local asteroidsTable = {}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

language_id = 1thisAsteroid.xthisAsteroid.ydisplay.contentWidthdisplay.contentHeight

使用nil等找出哪一个是print(thisAsteroid.x)

您还应该获得一个包含错误消息的行号,以帮助您找到问题。

找到nil值后,您必须阻止它变为nil,或者如果您不能这样做,则应将您的比较限制为非nil值。

答案 1 :(得分:0)

尝试

-- create new asteroids
createAsteroid()

-- remove asteroids which have been drifted off the screen
for i = #asteroidsTable, 1, -1 do
    local asteroid = asteroidsTable [i]

    if (asteroid.x < -100 or
        asteroid.x > display.contentWidth  + 100 or
        asteroid.y < -100 or
        asteroid.y > display.contentHeight + 100 )

    then 
        local asteroidToRemove = table.remove(asteroidsTable, i)
        if asteroidToRemove ~= nil then
            display.remove(asteroidToRemove)
            asteroidToRemove= nil
        end
    end
end
end

来自lua.org documentation

  

table.remove(list [,pos])

     

从列表中删除位置pos处的元素,返回值   删除的元素。当pos是1和#list之间的整数时,它   向下移动元素列表[pos + 1],列出[pos + 2],...,列表[#list]   并删除元素列表[#list]; #list时索引pos也可以是0   是0,或#list + 1;在这些情况下,该功能会删除该元素   列表[POS]。

     

pos的默认值是#list,因此调用table.remove(l)删除列表l的最后一个元素

因此,使用指令table.remove(asteroidsTable),您可以删除表asteroidsTable中的最后一个元素,但是您应该删除第i个元素。

详细了解从电晕forum中删除表格中的元素。