[手把手帶你Godot遊戲開發]FlappyBird:10 大不了從頭再來(新局啓動)

效果圖

在這裏插入圖片描述

1. 應用的總調度:Application場景

新建一個Node類型節點,更名爲"Application",併爲其添加腳本"Application.gd",這個場景將成爲整個遊戲的“總調度”節點

注意: 由於Godot Engine的節點系統非常靈活,我的組織方式只是一種思路,並不是唯一方法。

在這裏插入圖片描述

保存"Application"場景

在這裏插入圖片描述
在項目設置中將"Application"設置爲Main Scene(主場景,即:是遊戲運行時的默認場景)
在這裏插入圖片描述

#Application.gd
extends Node

var game_tscn = preload("res://Game.tscn")#把"Game.tscn"預加載進來

func _ready():
	add_to_group("GAME_STATE")#把自己加入"GAME_STATE"組
	get_tree().call_group("GAME_STATE","on_game_start")#調用"GAME_STATE"組的"on_game_start"方法
	
func on_game_start():
	var game = get_node_or_null("Game")#判斷是否有名爲"Game"的子節點
	if game != null: #判斷是否有名爲"Game"的子節點,如果有則移除並釋放
		remove_child(game)
		game.queue_free()
	game = game_tscn.instance()#然後實例化一個新的"Game.tscn"並作爲自己的子節點,開始新的一局
	add_child(game)

2. 萬物歸“零”

這裏的歸“零”指的是遊戲中的元素迴歸到遊戲剛開始的狀態

  • 無盡地面歸零

#Floor.gd
extends Sprite

func _ready():
	add_to_group("GAME_STATE")
	material.set_shader_param("speed",0.2) #遊戲開始時地面運動速度設爲0.2

func on_game_over():
	material.set_shader_param("speed",0)
  • 本局分數歸零

在這裏插入圖片描述

#Game.gd
extends Node

func _ready():
	GameData.score = 0

3. 萬事俱備,只欠觸發

在"Application.gd"的代碼中,我們已經看出一些端倪,下面的代碼就是新一局開始的觸發器

#Application.gd
...
get_tree().call_group("GAME_STATE","on_game_start")#調用"GAME_STATE"組的"on_game_start"方法
...

那麼我們應該在什麼時候開始新的一局呢?

“在小鳥碰到柱子時!!!”小明同學搶答道(這是我臨時杜撰的角色)
“錯!”老王說:“碰到柱子以後,我們好歹得讓玩家瞅清楚本局分數再開始下一局啊!”

所以一個不錯的方案是:

  1. 小鳥死亡
  2. 信息版升起
  3. 玩家看清了分數,再次點擊屏幕開始新的一局

所以在實現本部分之前,請先閱讀一下 《Godot Engine:用Call Method Track(方法回調軌道)實現動畫回調》一文,你將學會如何讓動畫觸發回調函數。

先回到"InfoBoard.gd"添加一些代碼

#InfoBoard.gd
extends TextureRect

func _ready():
	add_to_group("GAME_STATE")
	set_process(false)#剛開局先停用_process(delta)方法


func on_game_over():
	$LabelCurrent.text = str(GameData.score)
	$LabelRecord.text = str(GameData.load_record())
	$AnimationPlayer.play("show")

func _process(delta):#一旦開啓_process(delta),用戶再次點擊屏幕,將開始新的一局
	if Input.is_mouse_button_pressed(1):
		get_tree().call_group("GAME_STATE","on_game_start")

func on_board_shown():#由動畫觸發的回調函數,負責開啓_process(delta)方法
	set_process(true)

在"UI"場景中添加一個AnimationPlayer
在這裏插入圖片描述

在這裏插入圖片描述

4. 運行遊戲

由於我們爲遊戲設置了主場景"Application",所以這次我們直接按F5就可以直接運行遊戲啦!

遊戲完工,老王不禁淚流滿面:“多麼希望現在是2014年…”

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章