【手把手带你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.....")

忘了安装“物理地板”和“天花板”了,补之!

在这里插入图片描述

在这里插入图片描述

测试一下,得分和死亡事件都可以顺利触发了
在这里插入图片描述

评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发游戏的老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值