使用多个对象时遇到了问题

关于面向对象编程的问题。

Invader = {PosX = 5, PosY = 5, alive = true}

function Invader:new(x, y)

 --  local InvaderImage = paintUtils.loadImage("")


self.__index = self
self.PosX = x
term.setCursorPos(self.PosX, self.PosY)
write("V")


function refreshInvader()

    write("移动")
    term.setCursorPos(self.PosX, self.PosY)
    write(" ")
    self.PosX = self.PosX + 3
    term.setCursorPos(self.PosX, self.PosY)
    write("V")

end

end

如果我调用 refreshInvader,只有最后一个被创建的对象会移动。有没有办法让它们全部移动?

点赞
用户2858170
用户2858170

你只有一个 Invader 表格。你的所有操作都是引用 self,即 Invader

在你的代码中,你没有创建第二张表,作为“新对象”。

你需要像这样做才能获取多个对象:

Pet = {}
function Pet:new(name, sound)

  self.__index = self

  local newObject = setmetatable({}, self)
  newObject.name = name or "unnamed"

 return newObject

end

local a = Pet:new("Snuggles")
local b = Pet:new("Nibbles")
2020-12-07 08:23:00