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- 可以在任何地方使用,甚至是商业
模块化- 只使用所需的系统

当前限制

音频管理器正在计划中,但还没有完全实现 无内置联网(命令存在但需要实现) 一个大的单文件(但可以删除未使用的系统,或者使用所需的系统)

开始

  1. 导入本地包裹
  2. 在 Game Start 中添加 KISMET_NAMESPACE_INIT();
  3. 如需使用所需的系统

脚本包含了所有的内容,仅需一个文件就能够开始了!

性能提示

  • 对象池用于弹珠,粒子等
  • 每帧更新输入
  • 执行命令后输入处理
  • 在开发时进行内存快照才能捕获泄漏问题

链接

  • Discord:GameMaker Kitchen,GameMaker Official 服务端,或者直接私信我(erkan612)
  • GitHub: github.com/erkan612/KISMET

有问题?

来讨论我的脚本吧!我会尽量回答的。框架仍在进化中,所以反馈非常的有用。