我開始用Love2d引擎和Lua開發遊戲,並且我有以下代碼結構。Lua是否在表格中共享表格?
BaseEntity = {
x = 0,
y = 0,
w = 0,
h = 0,
img = {},
}
function BaseEntity:new(obj)
obj = obj or {}
setmetatable(obj, self)
self.__index = self
return obj
end
function BaseEntity:setPos(x, y)
self.x = x
self.y = y
end
function BaseEntity:setImage(index, image)
self.img[index] = image
end
PlayerType = {["NORMAL"] = 0, ["AI"] = 1}
PlayerState = {["SELECTED"] = 0, ["NOT_SELECTED"] = 1}
Player = {
type = PlayerType.NORMAL,
state = PlayerState.NOT_SELECTED
}
Player = BaseEntity:new(Player)
function Player:new(obj)
obj = obj or BaseEntity:new()
setmetatable(obj, self)
self.__index = self
return obj
end
function Player:setImage(image)
self.img["sprite"] = image
end
當我創建了幾個球員的對象,並指定使用setImage()
功能,每個對象不同的圖像,他們都有着我分配到的最後一個對象相同的圖像。但是當我使用setPos()
方法爲每個對象設置不同的位置時,它們被繪製在正確的獨特位置上。爲什麼會發生這種情況? Lua是否與BaseEntity
共享img
表中的所有實例?
不要在'BaseEntity'內包含'img = {}'。在'return obj'之前在構造函數'BaseEntity:new(obj)'中創建'img':'obj.img = {}' –
這條線應該被提升出函數:'self .__ index = self' – Deduplicator
Better重新考慮你的繼承框架。它被竊聽。 – Deduplicator