尝试在类中使用另一个类 - Lua和Love2D

我正在使用 Love2D 游戏引擎编写 Lua 程序。我想要在类中使用另一个类,我知道 Lua 并不直接支持类(如果要想和主流语言竞争,这是疏忽)。如果我只使用一个类,一切都很好,但当我开始嵌套类时就会遇到问题。我有三个包含代码的文件,以下是我收到的错误信息:

Error
menu.lua:8: attempt to index field 'newBox' (a nil value)
Traceback
menu.lua:8: in function 'create'
main.lua:6: in function 'load'
[C]: in function 'xpcall'

“main.lua” 中的代码:

require "menu"
require "box"

function love.load()

    newMenu = Menu:create()

end

function love.update(delta)

end

function love.draw()

    newMenu:draw()

end

“menu.lua” 中的代码:

Menu = {}
Menu.__index = Menu

function Menu:create()
    local menu = {}
    setmetatable(menu, Menu)

    menu.newBox:create(100, 100, 100, 50)

    return menu
end

function Menu:draw()
    self.newBox:draw()
end

“box.lua” 中的代码:

Box = {}
Box.__index = Box

function Box:create(x, y, width, height)
    local box = {}
    setmetatable(box, Box)

    box.x = x
    box.y = y
    box.width = width
    box.height = height

    return box
end

function Box:draw()
    love.graphics.rectangle("fill", self.x, self.y, self.width, self.height)
end

function Box:getX()
    return self.x
end

function Box:getY()
    return self.y
end

function Box:setX(x)
    self.x = x
end

function Box:setY(y)
    self.y = y
end
点赞
用户1442917
用户1442917

你没有给 newBox 字段分配任何值,因此在其为空时尝试为其创建一个索引会出现错误。

可能需要将 menu.newBox:create(100, 100, 100, 50) 替换为 menu.newBox = Box:create(100, 100, 100, 50)

2013-05-17 03:48:21