[手把手帶你Godot遊戲開發]FlappyBird:5.2 無盡水管子滾滾來(二)

在開始本部分之前,建議大家再重溫一下原版遊戲。在這個章節我們將實現以下功能

  • 自動銷燬
    我們想辦法把已經滾出屏幕的水管子自動銷燬,它們對遊戲已經沒有意義了
  • 隨機
    滾滾而來的水管子,應該是上下參差不齊的
  • 檢測加分事件
    小鳥每通過一對水管子,要加一分,這是遊戲規則的核心之一,雖然積分系統還沒有實現,但是我們先要檢測到這個事件
  • 檢測死亡事件
    小鳥撞到水管,地面,“天花板”,都要觸發死亡事件

在這裏插入圖片描述

自動銷燬

在這裏插入圖片描述

#Pipe.gd
extends Node2D

func _process(delta):
	position += Vector2.LEFT*200.0*delta
	if position.x < 0:
		queue_free()

隨機Y軸位置

同樣是在Pipe.gd中實現隨機Y軸位置的功能

#Pipe.gd
extends Node2D

func _ready():
	position.y += randf()*300-150 #Y軸隨機偏移量的範圍(-150,150)

func _process(delta):
	position += Vector2.LEFT*200.0*delta
	if position.x < 0:
		queue_free()

觸發得分

打開Pipe場景(“Pipe.tscn”),爲其中的"Area2D_ScoreArea"節點添加一個名爲"ScoreArea.gd"的腳本
在這裏插入圖片描述
在這裏插入圖片描述

#ScoreArea.gd

extends Area2D

func _ready():
	connect("body_exited",self,"_on_body_exited")
func _on_body_exited(_body):
	if _body.name == "Bird":#先通過body的名字判斷一下所撞之物是否爲"Bird"
		print("得分!!!!")
觸發死亡

在"Bird.gd"腳本中
在這裏插入圖片描述

# Bird.gd
extends RigidBody2D


func _ready():
	connect("body_entered",self,"on_body_entered")

func _physics_process(delta):
	if Input.is_mouse_button_pressed(1):
		linear_velocity = Vector2.UP*500
		angular_velocity = -3.0
	if rotation_degrees < -30:
		rotation_degrees = -30
		angular_velocity = 0
	if linear_velocity.y > 0.0:
		angular_velocity = 1.5

func on_body_entered(_body):
	if _body is StaticBody2D:#先通過body的類型判斷一下所撞之物是否爲一個"StaticBody2D"
		print("Die.....")

忘了安裝“物理地板”和“天花板”了,補之!

在這裏插入圖片描述

在這裏插入圖片描述

測試一下,得分和死亡事件都可以順利觸發了
在這裏插入圖片描述

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