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

问题描述 投票:0回答:1

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

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

lua null lua-table love2d
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.