2013-03-05 122 views
3

最近,我和朋友一直在研究love2d遊戲,但在開發計算機硬盤驅動器的早期階段停止工作,意味着只有我的朋友才能在其上工作。現在我有一臺電腦,並且我想在Love2d中創建一個主菜單,但是love.load函數中有很多代碼(世界的一代等等)。我的問題是,當遊戲運行時,我可以更改love.load中的內容嗎?例如,主菜單加載,然後按下開始按鈕時加載世界的世代。更改love.load功能

回答

3

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 

第二個選項從長遠來看更加靈活。它可以處理任何數量和類型的場景,而不需要每個場景的條件邏輯。這將需要一點「對象」思維。所有場景都需要一致的方式來更新和繪製。

如果你的世界需要一段時間來加載,你可能想要顯示一個臨時的「世界正在加載」的場景,這樣你的用戶就不會不耐煩了。