本章节效果图
小鸟撞上水管标志着一局游戏的结束,我们会用两个章节为它做一些收尾工作:
- 1.小鸟“失控”坠落
- 2.停止制造新的水管
- 3.现存水管停止运动
- 4.得分区域停止触发
- 5.地面停止滚动
- 6. 游戏结束的UI弹出
失控指的是发生碰撞以后,小鸟将无法再次受用户控制飞起来
# Bird.gd
extends RigidBody2D
func _ready():
connect("body_entered",self,"on_body_entered")
func _physics_process(delta):
if Input.is_mouse_button_pressed(1):
AudioManager.play("sfx_swooshing")
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:#碰撞以后
call_deferred("set_physics_process",false)#停用_physics_process(delta)
call_deferred("set_contact_monitor",false)#关闭碰撞检测
AudioManager.play("sfx_hit")#播放碰撞音效
$AnimationPlayer.play("die")#动画切换到死亡状态
GameData.update_record()#更新最好成绩记录
get_tree().call_group("GAME_STATE","on_game_over")#调用GAME_STATE的on_game_over方法
2.停止制造新的水管
#PipeManager.gd
extends Timer
var pipe_scn = preload("res://Objects/Pipe.tscn")
func _ready():
add_to_group("GAME_STATE")#加入GAME_STATE组
connect("timeout",self,"on_timeout")
func on_timeout():
var pipe = pipe_scn.instance()
add_child(pipe)
func on_game_over():
paused = true#停止计时
3.现存水管停止运动
#Pipe.gd
extends Node2D
func _ready():
add_to_group("GAME_STATE") #加入GAME_STATE组
position.y += randf()*300-150
func _process(delta):
position += Vector2.LEFT*200.0*delta
if position.x
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?