我是Lua的新手,我正在尝试使用LOVE2D创建视频游戏,该游戏中,玩家可以装饰在传送带上移动的比萨饼。玩家成功制作披萨后,他们会收到新订单并自动开始处理下一个披萨。
我面临的问题是跟踪玩家与之交互的比萨饼对象。我创建了一个表格来存放披萨,第一个索引处的项目是当前披萨,玩家可以在其中添加浇头。为了节省内存,我想过在离开屏幕后在第一个索引(table.remove(pizzas,1))处删除披萨。但是,这会导致错误“试图索引一个nil值”,我猜这是因为我在第一个索引处对该项目有多个引用(例如,要跟踪位置,pizzas [1] .x或为了跟踪奶酪,我有披萨[1] .cheeseCount)。如何避免这种情况?非常感谢!
https://www.lua.org/manual/5.3/manual.html#pdf-table.remove
table.remove(list [,pos])
从列表中移除位置pos的元素,返回已删除元素的值。当pos是1到#list之间的整数,它向下移动元素list [pos + 1],list [pos + 2],··,list [#list]和擦除元素列表[#list];当#list为0或#list +时,索引pos也可以为01;在这种情况下,该函数将删除元素列表[pos]。
pos的默认值为#list,因此调用表。remove(l)删除列表l的最后一个元素。
因此,您的问题很可能不是您索引第一个(已删除的)比萨,而是索引了已向下移动的比萨,因此不再以其原始索引存在。
local pizzas = {"A", "B", "C"}
table.remove(pizzas, 1)
现在您的表格如下:{"B", "C"}
并且pizzas[3]
将是nil
。