【Godot4笔记】存档功能(上)-游戏设置



Godot官方文档介绍的很详细,其中也给到了游戏配置的存档建议。大致看了下原理都大差不差。
SavingGames:https://docs.godotengine.org/en/stable/tutorials/io/saving_games.html
ConfigFile:https://docs.godotengine.org/en/stable/classes/class_configfile.html#class-configfile
我参考的是SavingGame文档中介绍的方法来保存设置信息。
首先创建一个用于写存档功能的脚本(不清楚以后会不会把游戏数据的相关存档也放这里,看官方文档介绍,可能内容会非常多,说不定还要找别的方式来存档游戏数据),存档脚本不挂在在任何场景内,直接在项目-项目设置-自动加载中启用,这样就可以全局调用了。
存档功能脚本内容如下:

存数据步骤如下:

读数据步骤如下:

以上方式,生成的存档文件是没有经过加密的。要想加密存档,使用FileAccess. open_encrypted_with_pass()方法打开文件,写入用file.store_var()方法,读出用file.get_var()方法。
存、读存档文件的方法很简单,比较复杂的是游戏初始化时将存档应用的顺序、时机、方式。
先判断配置文件是否存在,根据结果来觉得使用游戏初始的默认配置还是读取存档来初始化数据。

设置菜单中有些UI控件可以直接使用某些方法,既可以改变UI显示上的状态,也可以同时触发该控件的信号,类似CheckBox的set_pressed()和Slider的set_value()(godot自带编辑器不会提示)。不过,ItemList里我没有找到能同时改变显示状态和发出信号的方法,所以要手动设置显示状态,再调用信号。
使用便捷的方法来同时修改状态和触发信号,带来的问题就是按钮上绑定的音效,在游戏初始化时就会响起。因为音效播放的动作是直接写在信号方法里的,同时修改状态和触发信号的方法是没有办法通过信号内传递参数的,我的解决办法就是,加个计时。
以后可以在启动游戏后,做一个假的进度条,设置内容加载完成后进入主界面。

修改完配置后保存。



另外,两种全屏模式后,应该就不再设置窗口大小了,所以禁用ItemList的选单。可能是godot4的bug,不管代码还是属性面板内修改Items的Disabled的状态,item只有显示上改变了,点击还是会触发信号。也不知道是不是我哪里没整对。



