# 把 GameMaker 游戏移植到不需要导出授权的项目里

> 移植 GameMaker 游戏，意思是重建一个你拥有的项目。房间变成场景，对象变成节点，GML 事件变成脚本回调。

- URL: https://www.summerengine.com/zh/port-a-gamemaker-game
- Keyword: 移植 GameMaker 游戏
- Related: https://www.summerengine.com/zh/porting

移植 GameMaker 游戏，意思是在另一个引擎里重建一个你拥有的项目。GML 是 GameMaker 专有的，.yyp 项目文件、房间和对象定义在别处都没有导入器。不过重建是机械性的，因为 GameMaker 的模型能干净地对应到场景树。

你的 GML 和你自己的美术都归你，所以 GameMaker 移植里大部分东西你都能带走。市场上买的资源要单独确认，因为它们的许可可能把使用范围限制在 GameMaker 项目里。

Summer Engine 给你一个重建目标，包括带脚本的场景和节点、覆盖 GameMaker 能力范围的 2D 工具，以及游戏做大时可用的 3D。项目归你，没有分成，面向 Steam 和 itch.io 的桌面导出是引擎的一部分，而不是另外的购买项。

## 房间、对象和事件对应到场景树

一个房间变成一个场景。一个对象变成带脚本的节点，对象实例变成实例化的场景。Create 事件变成就绪回调。Step 事件变成每帧的处理回调。Draw 事件变成绘制回调。Alarm 变成计时器。对象继承变成场景继承或脚本继承。带原点的精灵变成带偏移的精灵节点，GameMaker 的碰撞遮罩变成碰撞形状。

## 需要重写的 GML 写法

有些 GML 习惯没法直接迁移。全局变量和 with 语句鼓励一种扁平结构，而节点树处理方式不同，通常靠节点引用和信号。ds_map、ds_list 和 ds_grid 变成字典、数组和嵌套数组，内存自动管理，所以手动的 destroy 调用消失了。instance_create 和 instance_destroy 变成场景实例化和排队移除节点。房间持久化和实例顺序需要显式处理，不能再依赖房间设置。

## 像素美术、镜头与分辨率

GameMaker 的 2D 项目通常定义一个固定房间尺寸和一个镜头视口。用一个设为基准分辨率的视口来复现它，并为像素美术使用整数缩放加最近邻过滤。亚像素移动是常见的回退：GameMaker 项目常常把坐标取整以保持像素对齐，如果重建时跳过这一步，精灵会在镜头移动时抖动。一开始就定好像素吸附策略，别逐个对象去打补丁。

## 导出不用分平台授权

GameMaker 历史上把导出目标拆在不同的授权档位和模块里。在 Summer Engine 里，Windows 和 macOS 桌面导出是引擎的一部分，项目完全归你，无需向 Summer 支付版税或收入分成。GDScript 项目还可以为 Summer Games 导出网页版本，主机则需要平台方批准。如果你的 GameMaker 游戏以后还想做 3D 或更重的着色器工作，这份余量就在同一个项目里，不需要换工具。

## FAQ

### GameMaker 的项目文件能导入别的引擎吗？

不能。GameMaker 的 .yyp 项目、房间和对象定义在其他引擎里都没有导入器，GML 也不能在 GameMaker 之外运行。移植是重建，但是机械性的重建，因为房间对应场景，对象对应带脚本的节点。

### GameMaker 的事件怎么对应？

Create 变成就绪回调，Step 变成每帧的处理回调，Draw 变成绘制回调，Alarm 变成计时器。对象继承变成场景或脚本继承，碰撞遮罩变成碰撞形状。

### ds_map、ds_list 和 ds_grid 用什么替代？

字典、数组和嵌套数组，而且全都自动管理内存。GameMaker 数据结构所需的手动 destroy 调用不再需要，这让重建后的代码少了一整类内存泄漏。

### 为什么移植后我的像素美术会抖？

亚像素移动。GameMaker 项目通常会把坐标取整，让精灵对齐到像素网格。如果重建后精灵停在小数坐标上，它们就会在镜头移动时抖动。一开始就为整个项目设定像素吸附策略。

### 每个导出平台都要单独的授权吗？

不用。桌面导出是引擎的一部分，项目归你，无需向 Summer 支付版税或收入分成。游戏用 C++ 和 GDScript 写，C# 也可在桌面编辑器中使用。

[重建你的 GameMaker 游戏](https://www.summerengine.com/zh/download)

---

## Machine-readable resources

- Site index for agents: https://www.summerengine.com/llms.txt
- Full inlined content: https://www.summerengine.com/llms-full.txt
- Porting catalog: https://www.summerengine.com/llms-porting.txt
- Structured catalog: https://www.summerengine.com/agent-catalog.json
- Sitemap: https://www.summerengine.com/sitemap.xml
- Developer resources: https://www.summerengine.com/docs
- Summer API (assets from any agent or code; public per-call model prices): https://docs.summerengine.com/api