Godot學習筆記(7)—— 簡單2D專案(3)
1. 新增GUI
1.1 新建場景,新增 CanvasLayer ,改名為HUD。
CanvasLayer 是繪圖層,用於繪製各種圖層。
layer 屬性決定了圖層的層級,從低向高繪製,-1 或更低通常用於繪製背景,1 或者更高通常用於繪製 HUD。
Transform2D() 用於計算圖層的縮放、扭曲、翻轉。引數為 (X.x, X.y, Y.x, Y.y, O.x, O.y) ,也就是右下角座標,左上角座標,平移向量座標。
1.2 建立Label節點,命名為 ScoreLabel ,在檢查器標籤頁的 Text 中輸入數字 0 ,並使用自定義字型。
在檢查器標籤頁的 Control——Theme Overrides——Fonts——Fonts——Font——Font Data 中選擇新建 DynamicFontData,點選剛剛新建的選項,匯入自定義字型。
在檢查器標籤頁的 Control——Theme Overrides——Fonts——Fonts——Settings 中,將 Size 設定為 64。
點選字型旁邊的下箭頭,選擇“複製”
建立Label節點,命名為 Message ,在檢查器標籤頁的 Text 中輸入“Dodge the Creeps!”, 並貼上剛才修改的自定義字型,修改字號。
建立Button節點,命名為 StartButton ,在檢查器標籤頁的 Text 中輸入“Start”,並貼上剛才修改的自定義字型,修改字號。
建立Timer節點,命名為 MessageTimer ,將 Wait Time 修改為 2 ,勾選“One Shot”。
1.3 新增指令碼
extends CanvasLayer
signal start_game
宣告一個“開始遊戲”的訊號。
func show_message(text): $Message.text = text $Message.show() $MessageTimer.start()
當需要臨時顯示文字的時候呼叫。
func show_game_over(): show_message("Game Over") # Wait until the MessageTimer has counted down. yield($MessageTimer, "timeout") $Message.text = "Dodge the\nCreeps!" $Message.show() # Make a one-shot timer and wait for it to finish. yield(get_tree().create_timer(1), "timeout") $StartButton.show()
遊戲結束的時候顯示結束畫面,計時器歸零後顯示標題和開始按鈕。
yield () 函式,將中斷當前函式的執行,直到獲得一個恢復函式(resume),之後將繼續執行之前被凍結的函式部分
舉例:
func my_func(): print("Hello") yield() print("world") func _ready(): var y = my_func() # Function state saved in 'y'. print("my dear") y.resume() # 'y' resumed and is now an invalid state.
結果是
Hello my dear world
如果 resume() 帶有引數,將成為 yield() 的值
yield( x(), y) 函式,將中斷當前函式的執行,執行 x() ,直到獲得一個訊號 y ,之後繼續執行之前被凍結的函式部分
func update_score(score):
$ScoreLabel.text = str(score)
當分數變化時,函式將被呼叫。
連線 StartButton 的 pressed() 訊號和 MessageTimer 的 timeout() 訊號到HUD場景
func _on_StartButton_pressed(): $StartButton.hide() emit_signal("start_game") func _on_MessageTimer_timeout(): $Message.hide()
1.4 在 Main 場景中例項化 HUD 場景
2. 美化
2.1 增加背景
使用ColorRect節點增加背景顏色,將節點繪製在Main下的第一個節點,以使節點繪製在所有元素之下。或者
使用TextureRect節點增加背景圖片
2.2 增加音效
在Main下增加兩個AudioStreamPlayer節點,分別載入背景音樂和死亡音效。
在new_game()下增加 $Music.play(),在game_over()下增加 $Music.stop()
在game_over()下增加 $Death_sound.play()
2.3 設定快捷鍵
在專案——專案設定——鍵位對映中,增加start_game專案,繫結回車鍵。
在StartButton節點中,在檢查器面板中選擇新建Shortcut,新建InputEventAction,將Action設定為start_game。
這樣回車鍵將在遊戲標題介面起開始遊戲的作用。