更改love.load函数中的内容

我的朋友和我最近一直在使用Love2D开发游戏,但在开发的早期,我的电脑硬盘停止工作,这意味着只有我的朋友能够继续工作。现在我有了一台电脑,我想在Love2D中制作一个主菜单,但是在love.load函数中有很多代码(如生成世界等)。我的问题是,当游戏正在运行时,我能否更改love.load中的内容?例如,主菜单加载完成后,按下开始按钮会加载世界的生成。

点赞
用户7625
用户7625

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

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

如果你的世界需要很长时间加载,你可能想显示一个临时的“世界正在加载”场景,让用户不要不耐烦。

2013-03-05 17:50:02