# QFrameworkGodot **Repository Path**: coderlinkf/qframework-godot ## Basic Information - **Project Name**: QFrameworkGodot - **Description**: 一个GDScript实现的QFramework框架,基于https://github.com/gwtt/QframeworkGodot,原仓库已删除/不公开了,将在后续自己的游戏开发中继续完善该框架 - **Primary Language**: 其他 - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QFrameworkGodot [![](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/liangxiegame/QFramework/blob/master/LICENSE) #### 介绍 一个GDScript实现的QFramework框架,基于https://github.com/gwtt/QframeworkGodot 框架使用可以看示例项目,注释都比较完整,地址:https://gitee.com/coderlinkf/lost-island-godot 原作者 guwt 基于 https://github.com/liangxiegame/QFramework 使用纯gdscript实现了QFramework框架的核心,并作为godot插件。 原作者 guwt 做的修改: - 1、去除了command这一层,因为gdscript语言的特性,不偏向于多层封装。 - 2、实现architecture采用全局自动加载形式,可以去掉单例块的代码,保证简洁 - 3、增加了save_manager,可以保存和加载数据,自定义加载数据类型 结构图: ![show](show.png) 原仓库已删除/不公开了,原LICENSE详见qframework/LICENSE,将在后续自己的游戏开发中继续完善该框架 #### 关于 QFramework QFramework 是提供一套简单、强大、易上手、符合 SOLID 原则、支持领域驱动设计(DDD)、事件驱动、数据驱动、分层、MVC 、CQRS、模块化、易扩展的架构,她的源码只有不到 1000 行,你可以完全把她放在你的笔记应用里保存。 详见:https://github.com/liangxiegame/QFramework #### V1.0 完善注释,使用 GDScript 类型指定,修改部分命名,方法,不再作为godot插件使用,修改 save_manager 支持加密(需在 QFConfig 中设置加密密码),并增加多存档位配置,存档位数据默认占用存档路径下 0 号文件夹 增加 QFConfig 用来定义常量,配置 修复 save_manager 保存整数/浮点数异常( 0/0.0 在 if 判断会是 false)导致初始值不为 0 的不能正常使用,比如初始值为 -1 ,0 作为有效值,应该触发值更新事件而没有触发,也不能正常从存档获取到值 增加 SaveSystem 监听保存事件 AbstractModel 不再调用 SaveManager 而是在需要时发送保存事件 发现 json 序列化不了复杂对象,即使类只有一些简单属性也只会序列化为字符串引用,那么因此增加基类 SerializableObj 用于将对象转换为字典,以及从字典还原对象 资源的序列化和反序列化也是类似,写入资源路径,然后通过 load 函数完成加载 还原原理实际上是将脚本路径也一起写到 json 中,然后加载脚本创建实例并调用 from_dict 还原对象 SerializableObj 使用示例( SaveSlot 继承了 SerializableObj ): ``` var slot:SaveSlot = SaveSlot.new() slot.name = "slot1" slot.date = Time.get_datetime_string_from_system() slot.mate_data = { "等级" = 1 } var dic:Dictionary = slot.to_dict() print("dic:",dic) var json:String=JSON.stringify(dic) print("json:",json) var dic_from_json:Dictionary = JSON.parse_string(json) if dic_from_json.has("res_path"): var script:GDScript = load(dic_from_json["res_path"] as String) as GDScript var slot_from_json:Variant = script.new() if slot_from_json is SerializableObj: slot_from_json.from_dict(dic_from_json) print("slot_from_json.to_dict():",slot_from_json.to_dict()) pass ```