我一直在关注一些关于 c++ 游戏编程的教程。我是 C++ 的新手,我正在使用 Microsoft Visual C++ 2010 Express IDE。我正在创建一个游戏,当我通过 IDE 运行程序时,它会按预期显示草精灵。但是当我从 Release 文件夹运行 .exe 文件时,它会显示奇怪的图像。当我从调试文件夹运行 .exe 文件时,我得到一个灰屏。谁能告诉我为什么会这样?
2 回答
我冒险猜测您的精灵图像作为数据文件保存在您的项目文件夹中。因此,我提供以下前提:
Visual Studio IDE 的默认运行位置是您正在执行的项目的项目文件夹。也就是说,它通常从保存.vcproj或.vcprojx文件的目录执行(通常是保存.sln文件的解决方案目录文件夹下的一个文件夹)。
如果您的项目从 IDE 正确运行,但无法直接从发布文件夹运行,则很可能您依赖于项目数据文件(在您的情况下为图像),这些文件与项目文件夹中的源文件一起保存。从 Release 文件夹运行时,这些文件不再可见,因为您的 Release 文件夹是您的工作目录;不是项目文件夹。
有很多方法可以解决这个问题,每种方法都有自己的优点。几个选项是:
后期构建步骤
为您的项目创建一个后期构建步骤,将您的数据文件复制到$(TargetDir)
您的项目所在的位置。然后,这些文件将在与您的可执行文件相同的目录中可见。
- 好处:很简单。
- 缺点:即使数据文件是“最新的”,如果单击“构建解决方案”,它将始终运行。
自定义构建目标
将您的数据文件添加到项目中并编写一个自定义构建脚本,该脚本执行相同的复制,但也建立一个输出依赖文件。
- 好处:几乎和 #1 一样简单,但有点乏味。
- 缺点:您可能有很多数据文件,每个文件都需要自己的自定义构建步骤。(注意:您可以多选项目中的所有数据文件,如果您对内置宏很有创意,您可以让它们都使用“相同”的构建规则和命令)。
嵌入式资源
将数据文件作为自定义资源添加到您的可执行文件中。
- 好处:您的项目不再需要与可执行文件并行的数据文件,因为它们嵌入在 EXE 模块的资源表中。
- 缺点:需要自定义代码才能从可执行文件的资源表而不是磁盘外动态加载自定义资源。这一点也不难,但需要额外的工作。
还有其他选择,但我希望这能给你一些想法。
我使用 VS2008 并尝试回答您的问题。右键单击项目并在弹出窗口底部选择属性,然后转到配置属性下的调试。你可以看到你运行的命令和你在 IDE 中传递的参数。我猜你错过了一些参数。