私は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