我是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
.