KISMET - GameMaker实用框架
大家好!
我在工作其他框架时,直到开始开发游戏项目时,它变得很重要。它是一个关注实用类和函数的框架;
什么是它?
KISMET是一个大型的系统集合,解决了GameMaker常见的问题。
核心功能
内存管理
- automatically 追踪所有 ds_* 结构(图,列表,队列,栈,栅格)
- 无内存泄漏问题,忘记了 ds_destroy 的调用
- 基于所有者来清理和检测泄漏
输入系统
- 基于动作的输入(如 Unity 的输入系统)
- 支持键盘,鼠标,4 个游戏手柄,和触控
- 支持模拟杆,包括死区和曲线
- 双击,长按和重复检测
- 动作在运行时可enable和disable
命令系统
- 队列命令执行延迟执行
- Undo/Redo 支持历史
- 命令链式执行用于剪辑
- 300+预定义命令用于常见游戏动作
任务和成就系统
- 以模板为基础的任务跟踪
- 多个任务状态(激活,完成,失败,隐藏等)
- 成就进度跟踪和解锁回调
保存管理
- JSON 基础保存,校验和
- 多个槽位,自动保存
- 缩略图支持
XML解析和写入
- 完全的 XML 支持,包括 CDATA 和属性
- 查询路径(如 "player(inventoryItem)/id@")
还有许许多多的功能:
- 对象池用于性能
- 状态机,包括进入,更新,退出
- 摄像机系统用于晃动,缩放,移动
- 动画包
- 性能监控器
- 颜色和Rect实用工具
*噪声函数(FBM,ridge)
快速示例
// 初始化一次
KISMET_NAMESPACE_INIT;
// 设置输入
KISMET.InputManager.CreateAction("jump")
.AddBinding(KISMET.InputBindingFromKey(vk_space))
.AddBinding(KISMET.InputBindingFromGamepadButton(KISMET_GAMEPAD_BUTTON.A));
// 每一帧更新输入
KISMET.InputManager.Update();
if (KISMET.InputManager.IsJustPressed("jump")) {
CMD_PLAYER_JUMP; // 队列一个跳跃命令
}
// 执行队列的命令
KISMET.DefaultCommandManager.Execute();
// 创建一个任务
var quest = new KISMET.Quest("Dragon Slayer", "消灭龙",
function() { CMD_ADD_GOLD(1000); }
);
quest.AddTask(new KISMET.Task("kill_dragon", 1));
KISMET.QuestTracker.AddQuest(quest);
quest.Start();
内存安全示例
// 使用这些来代替正常的 ds_create
var my_map = ds_map_create_kismet(); // 自动追踪
var my_list = ds_list_create_kismet();
// 清理当结束时 (或者让 MemoryTracker 处理)
ds_map_destroy_kismet(my_map);
// 检查泄漏问题
var stats = MemoryTracker.GetStats();
show_debug_message(stats);
为什么使用 KISMET?
节省时间 - 不再重新发明轮子
已经生产环境 - 为了这个没真的测试很多
良好文档 - 脚本有详细的注释(至少有部分,很懒)
MITicensed- 可以在任何地方使用,甚至是商业
模块化- 只使用所需的系统
当前限制
音频管理器正在计划中,但还没有完全实现 无内置联网(命令存在但需要实现) 一个大的单文件(但可以删除未使用的系统,或者使用所需的系统)
开始
- 导入本地包裹
- 在 Game Start 中添加
KISMET_NAMESPACE_INIT(); - 如需使用所需的系统
脚本包含了所有的内容,仅需一个文件就能够开始了!
性能提示
- 对象池用于弹珠,粒子等
- 每帧更新输入
- 执行命令后输入处理
- 在开发时进行内存快照才能捕获泄漏问题
链接
- Discord:GameMaker Kitchen,GameMaker Official 服务端,或者直接私信我(erkan612)
- GitHub: github.com/erkan612/KISMET
有问题?
来讨论我的脚本吧!我会尽量回答的。框架仍在进化中,所以反馈非常的有用。
评论 (0)