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



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

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

https://www.lua.org/manual/5.3/manual.html#pdf-table.remove

table.remove (list [, pos](

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

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

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

local pizzas = {"A", "B", "C"}
table.remove(pizzas, 1)

现在您的表格如下所示:{"B", "C"}

pizzas[3]nil.

相关内容

最新更新