我正在开发一个 2d 游戏。我在所有游戏逻辑中都使用 lua 脚本。现在的问题是排序太慢了。任何人都可以帮助改进它吗?
这是我关于 zobject 列表的代码。
local c = class("ZList") -- class is a function to generate a "Class"
function c:insert(v) -- every v(value or object) has a z field
if v.z == nil then v.z = -1 end
if self.head == nil then
self.head = {val=v, nxt=nil}
else
local p = self.head
local pp = p -- pp is a pointer to pre node
while v.z and p and p.val.z and p.val.z <= v.z do
pp = p
p = p.nxt
end
if p == self.head then
self.head = {val=v, nxt=p}
else
pp.nxt = {val=v, nxt=p}
end
end
end
function c:delete(v)
local p = self.head
local pp
while p and p.val ~= v do
pp = p
p = p.nxt
end
if p ~= nil then
if p == self.head then
self.head = p.nxt
else
pp.nxt = p.nxt
end
end
end
___ 更新_ _ __ _
谢谢尼科尔,每个人都回复了!我听从了你的建议:使用 table.insert 和 table.sort,使用不需要排序的静态列表。这是我的最终代码:
local remove_list
sort(Graphics.viewports, comp)
for _, viewport in pairs(Graphics.viewports) do
if viewport.visible then
remove_list = {}
if not viewport.static then sort(viewport.sprites, comp) end
for k, sprite in pairs(viewport.sprites) do
if not sprite:paint() then
table.insert(remove_list,1, k)
end
end
for _, k in pairs(remove_list) do
table.remove(viewport.sprites, k)
end
end
end