我创建了一个名为Piece的小类,如下所示
local Piece = {}
local Piece_mt = { __index = Piece}
function Piece.New(name, img, startPosX, startPosY)
newPiece = {}
newPiece.name = name;
newPiece.img = display.newImage(img, startPosX, startPosY);
print(newPiece.name);
local function OnHit ( event )
if event.phase == "ended" then
print(newPiece.name);
end
end
newPiece.img:addEventListener("touch", OnHit);
return setmetatable( newPiece, Piece_mt )
end
return Piece
当我创建类时,它会打印名称,并且它是正确的(与我作为参数传递的内容相匹配)。但是,当我稍后单击图像,并且由于触发的OnHit函数打印名称时,打印的名称始终是我创建的最后一个对象的名称,无论我单击哪个对象。有人可以解释为什么会发生这种情况以及如何解决它?
答案 0 :(得分:1)
function Piece.New(name, img, startPosX, startPosY)
newPiece = {}
-- process
return setmetatable( newPiece, Piece_mt )
end
在这里,您要分配全局变量newPiece
并每次都返回它。相反,请尝试使用局部变量:
function Piece.New(name, img, startPosX, startPosY)
local newPiece = {}
-- process
return setmetatable( newPiece, Piece_mt )
end