3

私の友人と私は最近 love2d でゲームに取り組んでいます。今はパソコンを持っているので、Love2dでメインメニューを作りたいのですが、love.load関数(ワールドの生成など)にたくさんのコードがあります。私の質問は、ゲームの実行中に love.load の内容を変更できますか? 例: メイン メニューがロードされ、スタート ボタンが押されるとワールドの生成がロードされます。

4

1 に答える 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 に答える