update()
函数在游戏的每一帧都被调用。如果Drop
粒子的y值大于160,我想将其从表格中删除。问题是,我得到“试图用零来比较数字”的错误,对线下谱写:lua - 表维护(粒子系统相关)
local particles = {};
function update()
local num = math.random(1,10);
if(num < 4) then
local drop = Drop.new()
table.insert (particles, drop);
end
for i,val in ipairs(particles) do
if(val.y > 160) then --ERROR attempt to compare number with nil
val:removeSelf(); --removeSelf() is Corona function that removes the display object from the screen
val = nil;
end
end
end
我在做什么错?很显然val
是零,但我不明白为什么表迭代会首先找到val,因为当它的y值大于160时,我将它设置为零。
根据文件说明只适用于下一个和配对。使用ipairs以数字顺序遍历表应该没问题。然而,他只是勉强val,而不是表中的条目http://www.lua.org/manual/5.1/manual.html#pdf-next – Alex 2011-06-01 00:01:19
我试过这段代码(在给条件加上-1并改变之后粒子[x] .val到粒子[x] .y),但我删除一个粒子后得到它:尝试索引字段'?'(一个零值) – clua7 2011-06-01 01:02:18
代码根据clua7的评论更新。无参考错误令人费解。 ['removeSelf()'](http://developer.anscamobile.com/reference/index/objectremoveself)调用将该对象与Corona的显示设备分离,并将其设置为'nil'将其从'particles'表中移除,准备好垃圾收集。然后,'x'应该递减,移动到表中的下一个对象。当您尝试索引字段时会报告什么行? (一个零值)?“ – JeffK 2011-06-01 12:52:40