[手把手带你Godot游戏开发]FlappyBird:7 心里有数(计分系统)

Phylicia ·
更新时间:2024-09-21
· 951 次阅读

文章目录1.启用Use Custom User Dir2.创建脚本文件存取工具类FileHelper游戏数据管理类GameData及单例化非加密版加密版3.在游戏中触发加分4.在游戏中触发更新历史记录 1.启用Use Custom User Dir

启用Use Custom User Dir,游戏运行时产生的用户持久化数据将会存放在这个目录下
在这里插入图片描述
有人可能好奇,这个Use Custom User Dir目录在哪里?顺便介绍Godot一个贴心的小设计,在项目>打开项目数据文件夹就可以直接打开了,省得你还要自己创建快捷方式,赞一个!

在这里插入图片描述

在Windows下实际上就是"用户名/AppData/Roaming/应用名"
在这里插入图片描述

2.创建脚本

在这里插入图片描述

文件存取工具类FileHelper

FileHelper是一个工具类,它包含2组(加密/非加密)的文件存取方法。这个小游戏本身没是必要加密的,不过Godot的文件加密流程非常简单,在此也顺便展示一下。
注意: 为了使用方便,FileHelper种4个方法全为静态方法,不需要挂到任何节点上,因此该类无须继承任何基类。

#FileHelper.gd class_name FileHelper #普通写入 static func save(path,data): var file = File.new() file.open(path,File.WRITE) file.store_string(var2str(data)) file.close() #普通读取 static func read(path,default_data): var data = default_data var file = File.new() file.open(path,File.READ_WRITE) var content :String = file.get_as_text() if not content.empty(): data = str2var(content) file.close() return data #加密写入 static func save_encrypted(path,data,key): var file = File.new() file.open_encrypted_with_pass(path,File.WRITE,key) file.store_string(var2str(data)) file.close() #加密读取 static func read_encrypted(path,key,default_data): var data = default_data var file = File.new() file.open_encrypted_with_pass(path,File.READ_WRITE,key) var content :String = file.get_as_text() if not content.empty(): data = str2var(content) file.close() return data 游戏数据管理类GameData及单例化

下面是非加密/加密两个版本的GameData,任选其一即可。然后按照《Godot Engine:用自动加载(AutoLoad)实现单例模式(Singleton Pattern)》一文中的方法将GameData单例化。

在这里插入图片描述

非加密版 #GameData.gd extends Node var score = 0 func update_record(): var record = FileHelper.read("user://record.res",0) if score > record: record = score FileHelper.save("user://record.res",score) return record 加密版 #GameData.gd extends Node var score = 0 func update_record(): var record = FileHelper.read_encrypted("user://record.res",OS.get_unique_id(),0) if score > record: record = score FileHelper.save_encrypted("user://record.res",score,OS.get_unique_id()) return record 3.在游戏中触发加分 #ScoreArea.gd extends Area2D func _ready(): connect("body_exited",self,"_on_body_exited") func _on_body_exited(_body): if _body.name == "Bird": AudioManager.play("sfx_point") #print("得分!!!!") GameData.score += 1 4.在游戏中触发更新历史记录

理论上讲,我们在触发死亡的代码部分插入GameData.update_record()就可以触发更新历史记录了,但是游戏结束的一些收尾工作我们还没有完成,所以这件事暂时先放一放。

在这里插入图片描述


作者:开发游戏的老王



godot 系统

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