1

独自の 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

私が作成したすべてのエンティティの配列をトラバースできるようにしたいので、そのテーブル部分は特にイライラしますが、それらはすべて同じエンティティを指しているようです。

私は何を間違っていますか?

4

1 に答える 1