创建类对象的多个实例。所有对象的数据等于最后创建的对象

时间:2014-07-03 14:29:06

标签: oop lua corona

我创建了一个名为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函数打印名称时,打印的名称始终是我创建的最后一个对象的名称,无论我单击哪个对象。有人可以解释为什么会发生这种情况以及如何解决它?

1 个答案:

答案 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