创建一个类对象的多个实例。所有对象的数据都相等,与最后创建的对象相同。

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

点赞
用户1009479
用户1009479
函数 `Piece.New(name, img, startPosX, startPosY)`,参数为棋子名字 `name`,棋子图片地址 `img`,棋子的初始 X 坐标 `startPosX`,棋子的初始 Y 坐标 `startPosY`。

```lua
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

2014-07-03 14:39:11