Love2D / LUA 对象不保留创建时的值的问题

我是一个 Löve2D 和 Lua 的菜鸟,正在试着制作一款小游戏。 我已经谷歌了一下,发现了关于类和对象的相同解决方案,但我仍然不确定我在做什么。我把类定义放在一个“模块”中——一个单独的文件,并从我的主文件中引用它。

这是我的模块中的代码:

-- 元类
Asterisk =  {
                id = nil,
                x = 0,
                y = 0,
                growth = 1,
                connections = {},
                color = { 0, 1, 0 },
                radius = 20,
                segments = 20
            }

-- 基类方法 new
function Asterisk:new ( o, id, x, y )
    o = o or {}
    setmetatable ( o, self )
    self.__index = self
    self.id = id
    self.x = x
    self.y = y
    return o
end
return Asterisk

在我的 main.lua 文件中,我必须显式重新设置我在构建对象时设置的值。此外,在构建对象时没有设置默认值……

function love.load ()
  Star = require "Asterisk"
  stars = {
            Star:new ( nil, 1, 300, 600 ),
            Star:new ( nil, 2, 400, 200 )
          }

  stars[1].x = 300
  stars[1].y = 600
  stars[2].x = 400
  stars[2].y = 200

  love.window.setFullscreen ( true, "desktop" )
  love.graphics.setColor ( 0.5, 0.01, 0.9 )

end

谢谢大家!


按照 @Egor-Skriptunoff 的建议,我将我的代码更改为以下内容。也像这样分配默认值给我想要的功能!有人看到我没有注意到的副作用吗?

function Star:new ( o, id, x, y )
    local o = o or {}
    setmetatable ( o, self )
    self.__index = self
    o.id = id or Star.id
    o.x = x or Star.x
    o.y = y or Star.y
    o.growth = Star.growth
    ...
点赞