本系列是根据老师的教程做的, 中间遇到些小问题, 于是把自己做的过程记录下来, 便于下次查看, 如有错误, 欢迎批评指正, 附上老师的原地址: 开发游戏的老王
本节效果
应用总调度:Application场景
- 创建新场景, 重命名:Application
- 将"Application"设置为主场景 (游戏开始的场景)
- 添加管理脚本
#Application.gd
extends Node
var game_tscn = preload("res://Scenes/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)#作为自己的子节点,开始新的一局
分数归零
在Game上添加一个脚本Game.gd
#Game.gd
extends Node
func _ready():
GameData.score = 0
点击屏幕触发: 再来一局
修改InfoBoard.gd代码
set_process(false)#刚开局先停用_process(delta)方法
###############分割线################
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)
可以看出一开始先停用_process(delta)方法, 避免每次一碰屏幕就重新启动
而最后的on_board_shown函数需要外部去调用, 只有在每次死亡的时候才会需要调用这个函数, 所以这里可以放在死亡动画触发的代码位置, 也可如下通过AnimationPlayer调用:
打开UI场景的AnimationPlayer, 在show的最后添加方法
运行一下(F5)