[手把手带你Godot游戏开发]FlappyBird:5.2 无尽水管子滚滚来(二)

Vala ·
更新时间:2024-09-21
· 811 次阅读

在开始本部分之前,建议大家再重温一下原版游戏。在这个章节我们将实现以下功能

自动销毁
我们想办法把已经滚出屏幕的水管子自动销毁,它们对游戏已经没有意义了 随机
滚滚而来的水管子,应该是上下参差不齐的 检测加分事件
小鸟每通过一对水管子,要加一分,这是游戏规则的核心之一,虽然积分系统还没有实现,但是我们先要检测到这个事件 检测死亡事件
小鸟撞到水管,地面,“天花板”,都要触发死亡事件

在这里插入图片描述

自动销毁

在这里插入图片描述

#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 0.0: angular_velocity = 1.5 func on_body_entered(_body): if _body is StaticBody2D:#先通过body的类型判断一下所撞之物是否为一个"StaticBody2D" print("Die.....")

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

在这里插入图片描述

在这里插入图片描述

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


作者:开发游戏的老王



godot

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章