【发布时间】:2013-02-20 04:44:40
【问题描述】:
我和我的朋友最近一直在开发 love2d 游戏,但在开发我的计算机硬盘驱动器的早期阶段停止工作,这意味着只有我的朋友可以工作。现在我有一台电脑,我想在 Love2d 中制作一个主菜单,但是 love.load 函数中有很多代码(世界的生成等)。我的问题是我可以在游戏运行时更改 love.load 中的内容吗?例如,主菜单加载,然后在按下开始按钮时加载世界的生成。
【问题讨论】:
我和我的朋友最近一直在开发 love2d 游戏,但在开发我的计算机硬盘驱动器的早期阶段停止工作,这意味着只有我的朋友可以工作。现在我有一台电脑,我想在 Love2d 中制作一个主菜单,但是 love.load 函数中有很多代码(世界的生成等)。我的问题是我可以在游戏运行时更改 love.load 中的内容吗?例如,主菜单加载,然后在按下开始按钮时加载世界的生成。
【问题讨论】:
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
从长远来看,第二个选项更加灵活。它可以处理任意数量和类型的场景,而无需为每个场景提供条件逻辑。这需要一点“对象”的思考。所有场景都需要一致的方式来更新和绘制。
如果您的世界需要一段时间才能加载,您可能希望显示一个临时的“世界正在加载”场景,这样您的用户就不会感到不耐烦。
【讨论】: