在開始本部分之前,建議大家再重溫一下原版遊戲。在這個章節我們將實現以下功能
- 自動銷燬
我們想辦法把已經滾出屏幕的水管子自動銷燬,它們對遊戲已經沒有意義了- 隨機
滾滾而來的水管子,應該是上下參差不齊的- 檢測加分事件
小鳥每通過一對水管子,要加一分,這是遊戲規則的核心之一,雖然積分系統還沒有實現,但是我們先要檢測到這個事件- 檢測死亡事件
小鳥撞到水管,地面,“天花板”,都要觸發死亡事件
自動銷燬
#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.....")
忘了安裝“物理地板”和“天花板”了,補之!
測試一下,得分和死亡事件都可以順利觸發了