私の友人と私は最近 love2d でゲームに取り組んでいます。今はパソコンを持っているので、Love2dでメインメニューを作りたいのですが、love.load関数(ワールドの生成など)にたくさんのコードがあります。私の質問は、ゲームの実行中に love.load の内容を変更できますか? 例: メイン メニューがロードされ、スタート ボタンが押されるとワールドの生成がロードされます。
質問する
430 次
1 に答える
3
love.load
関数は1回だけ実行されます。おっしゃるように、これは通常、データ構造を設定し、他のリソースをプリロードするために使用されます。これを使用して、ワールドプリロードとメニュープリロードの両方を処理できます。次に、ある種の状態を介してアクティブなものを制御します。簡単な例:
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
この2番目のオプションは、長期的にははるかに柔軟です。それぞれの条件付きロジックなしで、任意の数とタイプのシーンを処理できます。少し「オブジェクト」の考え方が必要になります。すべてのシーンには、更新と描画を行うための一貫した方法が必要です。
ワールドの読み込みに時間がかかる場合は、ユーザーが焦らないように、一時的な「ワールドが読み込まれています」シーンを表示することをお勧めします。
于 2013-03-05T17:50:02.660 に答える