- 出道即巅峰,先做个盈利千万的小项目
- 新建 Godot 项目
- Godot 界面介绍
- FlappyBird:1.Hello World
- FlappyBird:2.坠落吧,小鸟
- FlappyBird:3.在哪坠落就在哪飞起来
- FlappyBird:4. 无限地面
- FlappyBird:4.1 无限地面之 Godot 青年 (AnimationPlayer) 版
- FlappyBird:4.2 无限地面之普通青年版
- FlappyBird:4.3 无限地面之文艺青年(shader) 版
- FlappyBird:5.1 无尽水管子滚滚来(一)
- Godot Engine:5 种碰撞体以及 RigidBody 的 4 种模式
- Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D 与 Area2D 碰撞)
- Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D 与 StaticBody2D 碰撞)
- FlappyBird:5.2 无尽水管子滚滚来(二)
- Godot Engine:Timer 节点使用范例
- FlappyBird:6 来点 MUSIC(音效系统)
- Godot Engine:用自动加载(AutoLoad) 实现单例模式(Singleton Pattern)
- FlappyBird:7 心里有数(计分系统)
- Godot Engine:本地数据存取的帮助类(加密/非加密)
- FlappyBird:8 让数据说话(显示分数)
- Godot Engine:如何使用外部字体和 Label 节点制作一个计时器
- FlappyBird:9.1 天下没有不 OVER 的 GAME(上)
- Godot Engine:两行代码实现观察者模式(Observer Pattern),就问你服不服?
- FlappyBird:9.2 天下没有不 OVER 的 GAME(下)
- FlappyBird:10 大不了从头再来(新局启动)
- Godot Engine:用 Call Method Track(方法回调轨道)实现动画回调
- FlappyBird:11 番外篇:罗永浩都抖音了,要不咱们也抖一抖?(屏幕震动)
- Godot Engine:屏幕振动效果的实现
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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.....")
忘了安装“物理地板”和“天花板”了,补之!
测试一下,得分和死亡事件都可以顺利触发了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论