独自の ID を付与する LOVE のオブジェクトを作成しようとしています。基本的に、このオブジェクトを作成するたびに、self.id が 1 ずつ増加します。ただし、代わりに 5 つの新しいオブジェクトを連続して作成すると、ID は 4 になります (0 から始まるため)。
ただし、オブジェクトを作成してから ID を手動で変更すると、オブジェクトは正しく保存され、そのオブジェクトは idcounter に「結び付けられ」なくなります。
entities = {}
idcounter = 0
Entity = {id = -1, test=0}
function Entity:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
self.id = idcounter
idcounter = idcounter + 1
entities[idcounter] = self
return o
end
function Entity:GetID()
return self.id
end
function Entity:SetTest(v)
self.test = v
end
function Entity:GetTest()
return self.test
end
test = Entity:new()
test2 = Entity:new()
print(test:GetID())
print(test2:GetID())
test.id = 10
print(test:GetID())
print(test2:GetID())
for k,v in pairs(entities) do
print(test)
end
test3 = Entity:new()
print(test:GetID())
print(test2:GetID())
for k,v in pairs(entities) do
print(test)
end
印刷する
1
1
10
1
table: 00789020
table: 00789020
10
2
table: 00789020
table: 00789020
table: 00789020
私が作成したすべてのエンティティの配列をトラバースできるようにしたいので、そのテーブル部分は特にイライラしますが、それらはすべて同じエンティティを指しているようです。
私は何を間違っていますか?