我对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 = {}
感谢您的帮助!
答案 0 :(得分:0)
language_id = 1
,thisAsteroid.x
,thisAsteroid.y
或display.contentWidth
为display.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中删除表格中的元素。