【问题标题】:Changing what is in the love.load function更改 love.load 函数中的内容
【发布时间】:2013-02-20 04:44:40
【问题描述】:

我和我的朋友最近一直在开发 love2d 游戏,但在开发我的计算机硬盘驱动器的早期阶段停止工作,这意味着只有我的朋友可以工作。现在我有一台电脑,我想在 Love2d 中制作一个主菜单,但是 love.load 函数中有很多代码(世界的生成等)。我的问题是我可以在游戏运行时更改 love.load 中的内容吗?例如,主菜单加载,然后在按下开始按钮时加载世界的生成。

【问题讨论】:

    标签: menu lua love2d


    【解决方案1】:

    love.load 函数只运行一次。正如您所提到的,它通常用于设置数据结构和预加载其他资源。您可以使用它来处理世界预加载和菜单预加载。然后,通过某种状态控制什么是活动的。一个简化的例子:

    local state = "menu"
    
    function love.load()
        preLoadMenu()
        preLoadWorld()
    end
    
    function love.update(dt)
        if state == "menu" then
            updateMenu()
        else
            updateWorld()
        end
    end
    
    function love.draw()
        if state == "menu" then
            drawMenu()
        else
            drawWorld()
        end
    end
    
    function love.mousepressed(x, y, button)   
        if startClicked(x,y,button) then
            state = "world"
        end
    end
    

    可以想象,您绝对不想在加载时为您的游戏预加载所有内容。也许你的游戏太大了。如果是这种情况,请考虑使用活动场景。场景可能是菜单,也可能是游戏关卡。再举一个简化的例子:

    local currentScene
    
    function love.load()
        currentScene = loadMenu()
    end
    
    function love.update(dt)
        currentScene.update(dt)       
    end
    
    function love.draw()
        currentScene.draw()       
    end
    
    function love.mousepressed(x, y, button)   
        if startClicked(x,y,button) then            
            currentScene = loadWorld()
        end
    end
    

    从长远来看,第二个选项更加灵活。它可以处理任意数量和类型的场景,而无需为每个场景提供条件逻辑。这需要一点“对象”的思考。所有场景都需要一致的方式来更新和绘制。

    如果您的世界需要一段时间才能加载,您可能希望显示一个临时的“世界正在加载”场景,这样您的用户就不会感到不耐烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2012-10-23
      • 2015-04-25
      • 1970-01-01
      • 2013-08-29
      • 2021-11-19
      • 2015-03-18
      相关资源
      最近更新 更多