从表中删除项时,如何避免在Lua中创建nil引用?

从表中删除项时,如何避免在Lua中创建nil引用?,lua,null,lua-table,love2d,Lua,Null,Lua Table,Love2d,我是Lua的新手,我正在尝试使用LOVE2D创建一个视频游戏,玩家在游戏中装饰在传送带上移动的比萨饼。一旦玩家成功制作了一个比萨饼,他们就会收到一个新订单,并自动开始制作下一个比萨饼 我遇到的问题是跟踪玩家与之交互的比萨饼对象。我已经创建了一个表格来存放比萨饼,其中第一个索引中的项目是当前的比萨饼,玩家可以在其中添加配料。为了节省内存,我考虑删除第一个索引表中的比萨饼。一旦比萨饼离开屏幕,删除比萨饼,1。但是,这会导致错误“尝试索引一个nil值”,我猜这是因为我在第一个索引处有多个对项目的引用,

我是Lua的新手,我正在尝试使用LOVE2D创建一个视频游戏,玩家在游戏中装饰在传送带上移动的比萨饼。一旦玩家成功制作了一个比萨饼,他们就会收到一个新订单,并自动开始制作下一个比萨饼

我遇到的问题是跟踪玩家与之交互的比萨饼对象。我已经创建了一个表格来存放比萨饼,其中第一个索引中的项目是当前的比萨饼,玩家可以在其中添加配料。为了节省内存,我考虑删除第一个索引表中的比萨饼。一旦比萨饼离开屏幕,删除比萨饼,1。但是,这会导致错误“尝试索引一个nil值”,我猜这是因为我在第一个索引处有多个对项目的引用,例如,为了跟踪位置,pizzas[1].x,或者为了跟踪奶酪,我有pizzas[1].cheeseCount。我如何避免这种情况?非常感谢

表.删除列表[,位置]

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

pos的默认值是list,因此call table.removel 删除列表l的最后一个元素

因此,您的问题很可能不是索引第一个移除的比萨饼,而是索引一个已下移的比萨饼,因此在其原始索引中不再存在

local pizzas = {"A", "B", "C"}
table.remove(pizzas, 1)
现在您的表看起来像:{B,C}


pizzas[3]将为零。

如何过渡到下一个pizzas?@Nifim I set pizzas[1]=pizzas[2],然后按表删除第一个项目。removepizzas,1.调用table时。remove它将为您重新排序数组。无需设置比萨饼[1]=比萨饼[2]