十月初,我们马歇尔大学的俱乐部 Geeks and Gadgets 参加了首届 Open Jam,这是一个庆祝最佳开源工具的游戏创作活动。游戏创作活动是参与者以团队形式开发电脑游戏的趣味活动。创作活动往往时间很短——只有三天——而且非常累人。Opensource.com 于八月下旬宣布了 Open Jam,超过 三十几个游戏 参加了比赛。
我们的俱乐部喜欢在我们的项目中使用开源软件,因此 Open Jam 自然而然成为我们想要参加的创作活动。我们的提交作品是一个名为 Mark My Words 的实验性游戏。我们使用了各种免费和开源 (FOSS) 工具来开发它;在本文中,我们将讨论我们使用的一些工具以及需要注意的潜在障碍。
音频工具
MilkyTracker
MilkyTracker 是用于创作老式视频游戏音乐的最佳软件包之一。它是一个 音乐跟踪器 的示例,这是一个功能强大的 MOD 和 XM 文件创建器,具有独特的基于网格的模式编辑器。我们用它来创作我们游戏中的大部分音乐片段。这个程序的一大优点是它比我们的大多数其他工具占用更少的磁盘空间和 RAM。即便如此,MilkyTracker 仍然非常强大。

opensource.com
用户界面需要一段时间才能适应,因此这里为任何想要试用 MilkyTracker 的音乐家提供一些指导
- 转到 Config > Misc. 并将编辑模式控制样式设置为“MilkyTracker”。这将为您提供几乎所有操作的现代键盘快捷键
- 使用 Ctrl+Z 撤消
- 使用 Ctrl+Y 重做
- 使用空格键切换模式编辑模式
- 使用退格键删除上一个音符
- 使用 Insert 键插入行
- 默认情况下,音符将继续播放,直到它在该通道上被替换。您可以通过使用反引号 (`) 键插入 KeyOff 音符来显式结束音符
- 您必须先创建或找到样本才能开始创作。我们建议在 Freesound 或 ccMixter 等网站上找到 知识共享 许可的样本
此外,请随时查阅 MilkyTracker 文档页面。它包含指向大量教程和手册的链接。一个好的起点是项目维基上的 MilkyTracker 指南。
LMMS
我们的两位音乐家使用了多功能且现代的音乐创作工具 LMMS。它带有很酷的样本和效果库,以及各种灵活的插件,用于生成独特的声音。LMMS 的学习曲线出乎意料地低,部分原因是其出色的节拍/贝斯线编辑器。

opensource.com
我们对尝试 LMMS 的音乐家有一个建议:使用插件。对于 芯片音乐 风格的音乐,我们推荐 sfxr、BitInvader 和 FreeBoy。对于其他风格,ZynAddSubFX 是一个不错的选择。它带有各种合成乐器,您可以随意更改。
图形工具
Tiled
Tiled 是开源游戏开发中流行的瓦片地图编辑器。我们用它为我们的游戏场景组装一致的、复古风格的背景。

opensource.com
Tiled 可以将地图导出为 XML、JSON 或展平图像。它稳定且跨平台。
Tiled 的一个功能(我们在创作活动期间未使用)允许您在地图上定义和放置任意游戏对象,例如硬币和道具。您所要做的就是将对象的图形作为图块集加载,然后使用“插入图块”放置它们。
总的来说,Tiled 是一款出色的软件,我们推荐给任何需要地图编辑器的项目。
Piskel
Piskel 是一款像素艺术编辑器,其源代码根据 Apache License, Version 2.0 获得许可。我们在创作活动期间几乎所有图形资源都使用了 Piskel,我们肯定会在未来的项目中使用它。
Piskel 的两个功能在创作活动期间为我们提供了极大的帮助,即洋葱皮和精灵图导出。
洋葱皮
洋葱皮功能将使 Piskel 在您编辑时显示动画的前一帧和后一帧的虚影叠加,如下所示

opensource.com
洋葱皮很方便,因为它可以作为绘图指南,并帮助您在整个动画过程中保持角色形状和体积的一致性。要启用它,只需单击屏幕右上角预览窗口下方的洋葱形图标。

opensource.com
精灵图导出
Piskel 将动画导出为精灵图的功能也很有帮助。精灵图是包含动画所有帧的单个栅格图像。例如,这是我们从 Piskel 导出的精灵图

opensource.com
精灵图由两帧组成。一帧在图像的上半部分,另一帧在图像的下半部分。精灵图通过允许从单个文件加载整个动画来大大简化游戏的代码。这是上述精灵图的动画版本

opensource.com
Unpiskel.py
在创作活动期间,我们多次想要批量将 Piskel 文件转换为 PNG。由于 Piskel 文件格式基于 JSON,我们编写了一个名为 unpiskel.py 的小型 GPLv3 许可的 Python 脚本来执行转换。
它的调用方式如下
python unpiskel.py input.piskel
该脚本将从 Piskel 文件(此处为 input.piskel
)中提取 PNG 数据帧和图层,并将它们存储在自己的文件中。这些文件遵循 NAME_XX_YY.png
模式,其中 NAME
是 Piskel 文件的截断名称,XX
是帧号,YY
是图层号。
由于该脚本可以从 shell 调用,因此可以在整个文件列表上使用。
for f in *.piskel; do python unpiskel.py "$f"; done
Python、Pygame 和 cx_Freeze
Python 和 Pygame
我们使用 Python 语言制作了我们的游戏。它是一种脚本语言,通常用于文本处理和桌面应用程序开发。它也可以用于游戏开发,就像 Angry Drunken Dwarves 和 Ren'Py 等项目所展示的那样。这两个项目都使用名为 Pygame 的 Python 库来显示图形和生成声音,因此我们也决定在 Open Jam 中使用这个库。
事实证明,Pygame 既稳定又功能丰富,并且非常适合我们正在创建的街机风格游戏。该库的速度在低分辨率下足够快,但其仅使用 CPU 的渲染在高分辨率下开始变慢。这是因为 Pygame 不使用硬件加速渲染。但是,基础设施已经到位,供开发人员充分利用 OpenGL。
如果您正在寻找一个好的 2D 游戏编程库,Pygame 是一个值得关注的库。它的网站上有 一个很好的教程 可以入门。请务必查看一下!
cx_Freeze
为发行版准备我们的游戏很有趣。我们知道 Windows 用户不太可能安装 Python,要求他们安装它会太过分了。最重要的是,他们还必须安装 Pygame,这在 Windows 上不是一项直观的任务。
有一件事很清楚:我们必须将我们的游戏变成更方便的形式。许多其他 Open Jam 参与者使用了专有的游戏引擎 Unity,这使他们的游戏可以在 Web 浏览器中玩。这使它们非常方便。方便是我们游戏甚至连一丝都没有的东西。但是,由于充满活力的 Python 生态系统,我们有了选择。存在一些工具可以帮助 Python 程序员为他们在 Windows 上的发行版准备程序。我们考虑的两个是 cx_Freeze 和 Pygame2exe(它使用 py2exe)。我们决定使用 cx_Freeze,因为它具有跨平台性。
在 cx_Freeze 中,您只需在 shell 中运行如下命令即可打包用于发行的单脚本游戏
cxfreeze main.py --target-dir dist
cxfreeze
的这种调用将获取您的脚本(此处为 main.py
)和您系统上的 Python 解释器,并将它们捆绑到 dist
目录中。完成此操作后,您所要做的就是手动将游戏的数据文件复制到 dist
目录中。您会发现 dist
目录包含一个可执行文件,可以运行该文件来启动您的游戏。
有一种更复杂的方式可以使用 cx_Freeze,它可以让您自动化数据文件的复制,但我们发现 cxfreeze
的直接调用足以满足我们的需求。感谢这个工具,我们使我们的游戏更容易玩。
庆祝开源
Open Jam 很重要,因为它庆祝开源软件开发模式。这是一个分析当前开源工具状态以及未来我们需要努力的方向的机会。游戏创作活动也许是游戏开发者尝试将其工具推向极限,了解为了未来游戏开发者的利益必须改进什么的最佳时机。
开源工具使人们能够在不损害其自由且无需预先投入资金的情况下探索他们的创造力。尽管我们可能不会成为专业的游戏开发者,但我们仍然能够通过我们简短的实验性游戏 Mark My Words 略微体验一下。这是一款以语言为主题的游戏,描绘了一个虚构的文字系统在其整个历史中的演变。Open Jam 还有许多其他令人愉快的提交作品,它们都值得一看。真的,去看看!
在结束之前,我们要感谢所有 参与的俱乐部成员,他们使这次体验真正有价值。我们还要感谢 Michael Clayton、Jared Sprague 和 Opensource.com 主办 Open Jam。这真是一次快乐的经历。
现在,我们有一些问题要问读者。您是 FOSS 游戏开发者吗?您选择的工具是什么?请务必在下面留言!
3 条评论