【问题标题】:OOP GUI Error: main.lua:4: attempt to index local (a boolean value)... Issue with modulesOOP GUI 错误:main.lua:4:尝试索引本地(布尔值)... 模块问题
【发布时间】:2016-12-27 05:57:20
【问题描述】:

今天,我正忙着为我想开始在 LOVE2D 中制作的游戏制作一个 gui 类。我决定尝试使用 OOP,以便将来更轻松地创建新菜单。 OOP 工作得很好,直到我尝试将它放入它自己的模块中,它给了我上面的错误。我已经根据类似的代码对我的代码进行了两次和三次检查,但我找不到问题所在。我也查了一下,有类似的线程,但没有什么能帮助我解决问题。这是相关代码...

来自main.lua

local gui = {
x = 0, y = 0, 
width = 0, height = 0, 

popupSpeed = 300,

active = false,

color = {red = 0, blue = 0, green = 0, alpha = 0},

menuType = "",

--buttons = require "Game/buttons"
}

从 gui.lua...

local newGUI = require "Game/gui"

local menus = { 
    playerInv = newGUI.new()
}
function love.load()
    menus.playerInv:createDropDown("right" , _, 30, 100, love.graphics.getHeight() - 60, 50, 128, 50, 255)
end

function gui.new() 
    newMenu = {}
    for k, v in pairs(gui) do
        newMenu[k] = v
    end
    return newMenu
end

function gui:createDropDown(direction, x, y, width, height, red, blue, green, alpha)
    self.red = red
    self.blue = blue
    self.green = green
    self.alpha = alpha
    if direction == "right" then 
        self.x = love.graphics.getWidth() - width
        self.y = y
        self.width = width
        self.height = height
        self.menuType = "rightDropDown"
    elseif direction == "left" then
        self.x = 0
        self.y = y
        self.widthMax = width
        self.height = height
        self.menuType = "leftDropDown"
    elseif direction == "down" then
        self.x = x
        self.y = y
        self.width = width
        self.heightMax = height
        self.menuType = "regDropDown"
    end
end

function gui:drawGui()
    if self.active == true then
        love.graphics.setColor(self.red, self.blue, self.green, self.alpha)
        love.graphics.rectangle("fill", self.x, self.y, self.width, self.height, 10, 10, 6) 
    end
end

【问题讨论】:

    标签: oop module lua love2d


    【解决方案1】:

    我假设第一个 sn-p 是 Game/gui,第二部分是 main.lua,如果是这样,您正在尝试调用 .new() 函数,该函数在您的 Game/gui 文件中显然不存在.您还需要将 gui 的所有功能移动到它自己的文件中,这包括 gui.new()gui:createDropDowngui:drawGui() 最后但并非最不重要的一点,您必须在它自己的文件末尾返回 gui。

    你的主文件最终应该是这样的:

    local newGUI = require "Game/gui"
    
    local menus = { 
        playerInv = newGUI.new()
    }
    function love.load()
        menus.playerInv:createDropDown("right" , _, 30, 100, love.graphics.getHeight() - 60, 50, 128, 50, 255)
    end
    

    和 Game/gui 有点像这样:

    local gui = {} -- With all the stuff inside
    
    function gui.new() 
    -- With all the stuff it had inside
    end
    
    function gui:createDropDown()
    -- With all the stuff it had inside
    end
    
    function gui:drawGui()
    -- With all the stuff it had inside
    end
    
    return gui
    

    你看,你忘了把它的函数移动到它自己的文件中,然后返回 gui 本身。不要忘记替换我在 Game/gui 上省略的内容!

    【讨论】:

    • 谢谢!在阅读本文之前,我想通了一点,但这仍然有帮助。另外,是否有关于如何在 lua 中构建 gui 的好的教程或线程或类似的东西?
    • Love2D 应该有一些很好的示例项目,阅读、运行和修改示例代码是一种很好的学习方式。 love2d.org/wiki/examples.love
    猜你喜欢
    • 2019-05-07
    • 1970-01-01
    • 2013-08-29
    • 2022-01-02
    • 1970-01-01
    • 2017-04-22
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多