[手把手带你Godot游戏开发]FlappyBird:10 大不了从头再来(新局启动)

Brigitte ·
更新时间:2024-11-13
· 508 次阅读

效果图

在这里插入图片描述

目录1. 应用的总调度:Application场景2. 万物归“零”无尽地面归零本局分数归零3. 万事俱备,只欠触发4. 运行游戏 1. 应用的总调度:Application场景

新建一个Node类型节点,更名为"Application",并为其添加脚本"Application.gd",这个场景将成为整个游戏的“总调度”节点

注意: 由于Godot Engine的节点系统非常灵活,我的组织方式只是一种思路,并不是唯一方法。

在这里插入图片描述

保存"Application"场景

在这里插入图片描述
在项目设置中将"Application"设置为Main Scene(主场景,即:是游戏运行时的默认场景)
在这里插入图片描述

#Application.gd extends Node var game_tscn = preload("res://Game.tscn")#把"Game.tscn"预加载进来 func _ready(): add_to_group("GAME_STATE")#把自己加入"GAME_STATE"组 get_tree().call_group("GAME_STATE","on_game_start")#调用"GAME_STATE"组的"on_game_start"方法 func on_game_start(): var game = get_node_or_null("Game")#判断是否有名为"Game"的子节点 if game != null: #判断是否有名为"Game"的子节点,如果有则移除并释放 remove_child(game) game.queue_free() game = game_tscn.instance()#然后实例化一个新的"Game.tscn"并作为自己的子节点,开始新的一局 add_child(game) 2. 万物归“零”

这里的归“零”指的是游戏中的元素回归到游戏刚开始的状态

无尽地面归零 #Floor.gd extends Sprite func _ready(): add_to_group("GAME_STATE") material.set_shader_param("speed",0.2) #游戏开始时地面运动速度设为0.2 func on_game_over(): material.set_shader_param("speed",0) 本局分数归零

在这里插入图片描述

#Game.gd extends Node func _ready(): GameData.score = 0 3. 万事俱备,只欠触发

在"Application.gd"的代码中,我们已经看出一些端倪,下面的代码就是新一局开始的触发器

#Application.gd ... get_tree().call_group("GAME_STATE","on_game_start")#调用"GAME_STATE"组的"on_game_start"方法 ...

那么我们应该在什么时候开始新的一局呢?

“在小鸟碰到柱子时!!!”小明同学抢答道(这是我临时杜撰的角色)
“错!”老王说:“碰到柱子以后,我们好歹得让玩家瞅清楚本局分数再开始下一局啊!”

所以一个不错的方案是:

小鸟死亡 信息版升起 玩家看清了分数,再次点击屏幕开始新的一局

所以在实现本部分之前,请先阅读一下 《Godot Engine:用Call Method Track(方法回调轨道)实现动画回调》一文,你将学会如何让动画触发回调函数。

先回到"InfoBoard.gd"添加一些代码

#InfoBoard.gd extends TextureRect func _ready(): add_to_group("GAME_STATE") set_process(false)#刚开局先停用_process(delta)方法 func on_game_over(): $LabelCurrent.text = str(GameData.score) $LabelRecord.text = str(GameData.load_record()) $AnimationPlayer.play("show") func _process(delta):#一旦开启_process(delta),用户再次点击屏幕,将开始新的一局 if Input.is_mouse_button_pressed(1): get_tree().call_group("GAME_STATE","on_game_start") func on_board_shown():#由动画触发的回调函数,负责开启_process(delta)方法 set_process(true)

在"UI"场景中添加一个AnimationPlayer
在这里插入图片描述

在这里插入图片描述

4. 运行游戏

由于我们为游戏设置了主场景"Application",所以这次我们直接按F5就可以直接运行游戏啦!

游戏完工,老王不禁泪流满面:“多么希望现在是2014年…”

在这里插入图片描述


作者:开发游戏的老王



godot 启动

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