新手教程 - 如何发布你的EasyX游戏

有小伙伴在交流群里问起如何发布自己的游戏,才意识到还有这个问题。之前的视频教程只是讲解了如何在VisualStudio中编写EasyX相关的代码,并没有提到如何将完成的项目发布的方法,这种问题在很多教程中都是默认学习者已经掌握了,但实际情况是如何打包发布涉及到开发工具使用和编译选项等诸多概念,想来自己初学时也踩过很多坑,便整理一下相关的内容,供新手小伙伴们参考。

群聊记录

本文以提瓦特幸存者进阶版的项目为例,以点带面地讲解新手在发布自己的程序时可能遇到的问题和对应的解决方案,本项目开发环境为VisualStudio2022,图形库为EasyX,使用其他开发环境或图形库的C++项目操作相似。

0x01. Debug & Release

首先应该注意的是,将当前使用的编译配置从Debug改为Release。

Debug -> Release

在VisualStudio的默认C++工程配置下,Debug模式下生成的程序包含更多调试信息,且不进行任何优化,来方便开发过程中进行调试;Release模式下编译器则会对生成程序的体积和运行速度进行优化。除此之外,Debug模式下链接的VC运行库是跟随开发环境存在的,也就是说如果你把在Debug模式下生成的exe程序发给电脑上没有安装VS的其他朋友体验,就可能会出现如下图所示的一连串错误弹窗。

除此之外,旁边的x64代表着生成的目标程序为64位程序,如果将它修改为x86则会生成32位程序,64位程序有着更好的性能,但是不能在32位的操作系统上运行——恕我直言,如果你的朋友不是喜欢收藏复古Xp系统机器的人,那么他大概率不会使用32位的操作系统。

使用Debug模式发布可能出现的报错

0x02. MT & MD

随后需要修改的是,修改项目属性的运行库从默认的/MD修改为/MT。

在打开项目属性页时,首先需要注意的是最上方的配置是否是当前正在使用的编译配置,也就是咱们上一步中已经设置好的Release和x64;随后在下方的列表中找到:C/C++ -> 代码生成 -> 运行库,并将它从默认的“多线程DLL(/MD)”修改为“多线程(/MT)”。

在使用MD编译选项时,编译器会链接MSVCRT.lib导入库,并在运行时查找MSVCRT.dll动态链接库,如果设备上没有找到这个库,就会出现诸如上一步中出现的错误弹窗导致程序无法正常运行;而在使用MT编译选项时,编译器会静态链接LIBCMT.lib库,这会导致生成的exe体积稍大,但是运行时不会再依赖MSVCRT.dll动态库。朋友的电脑上有没有MSVCRT.dll是一个不可知的玄学问题,所以保险起见还是将运行库修改为MT。

MD -> MT

0x03. 拷贝游戏资源

在上面两步工作完成后,我们便可以点击运行或右键工程选择生成程序了,如果在创建项目时没有勾选“将解决方案和项目放在同一目录中”选项,那么生成的exe程序文件就存在于.sln工程文件的同级目录的x64文件夹中。

exe程序文件所在目录

我们新建一个目录将exe文件拷贝出来,最后还不要忘记将咱们在运行时动态加载的图片素材资源和声音文件拷贝出来,在默认设置下,开发时在VisualStudio内运行调试时的根目录与新建代码文件存放的目录相同,也就是上图所示的TivatSurvivor目录,而在发布后在外部通过exe启动时,程序运行的根目录是exe文件所在的目录,所以在拷贝资源时也要确保相对路径正确。

下图是提瓦特幸存者项目完整的发布目录文件:

完整发布目录文件清单

0x04. 窗口标题 & 图标

到目前为止,发布程序正常运行已经没有任何问题了,我们可以把整个目录打成压缩包发给其他朋友体验了,但是如果我们想要设置一些更个性化的内容……

EasyX生成的窗口标题默与exe文件名相同,所以如果我们希望修改窗口标题可以直接修改exe文件名,但是如果想要在运行时动态地赋予窗口标题名,那么可以使用SetWindowText宏,如以下代码:

1
2
HWND hwnd = initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
SetWindowText(hwnd, _T("提瓦特幸存者 - Pro Max +"));

动态修改窗口标题

如果我们想要修改游戏文件和窗口的图标,可以通过icon资源文件:首先找到合适的icon图标文件,我们可以使用在线工具将png等图片文件转换为ico图标文件,或在本地使用格式工厂等工具进行转换,又或者使用更专业的图标制作软件IconWorkshop,但是一定不要只是修改文件后缀!随后将得到的icon文件复制到我们的工程目录下,然后在VisualStudio解决方案管理器视图中右键选择“添加”->“资源”,在弹出的小窗口中点击“Icon”->“导入”,选择我们已经准备好的icon文件即可。

添加图标资源

随后,记得重新编译生成我们的项目,图标资源便会打包到exe文件中。如果我们发现新生成的exe程序文件图标仍然没有变化,那大概率是因为Windows资源管理器图标缓存没有刷新导致的,我们给exe文件重新命名或者移动到一个新的目录查看即可,只要程序启动后窗口的图标变为了新的图标,那么给程序更换图标就成功了。

0x05. 单文件发布

有小伙伴可能希望自己的程序可以以单个文件的形式发给其他朋友体验,而不是拖带着img和mus等资源目录,一种方式是使用和类似图标的方式,将图片和声音资源编译到exe文件内部,EasyX也提供了运行时从资源中加载图片的函数,想要通过这种方式进行处理的小伙伴可以参考这篇文章的资料:《Windows游戏编程大师技巧》学习笔记(四)

这里我再介绍一种更为通用的单文件处理方法,我们可以使用诸如Enigma Virtual Box等三方打包工具将我们的目录打包到exe中,Enigma Virtual Box通过虚拟文件系统和虚拟注册表系统拦截应用程序对文件系统和注册表系统的访问,并将它们根据配置重定向到对应的内存中……当然,原理很神奇,但是实际操作只需要选择对应的文件,然后添加需要打包的目录,最后点一下“Process”就好了。

Enigma Virtual Box

快把你的编程作品与朋友们一起分享吧!

作者

Voidmatrix

发布于

2023-12-27

更新于

2023-12-27

许可协议

评论