当资源过多时,如何在游戏中打包资源?


10

我最近使用Allegro 5框架在C ++中创建了一个基本的Space Invaders克隆。完成之后,我意识到我有大约10个精灵,以及13MB的DLL。有些玩家甚至没有mingW DLL,这使得游戏非常混乱。

如何打包所有资源,以便可以轻松地向游戏中添加和删除数据,并减少资源占用的大小,基本上将它们放在一个位置?我正在使用代码块。


1
您如何理解资源一词?诸如图像,声音之类的资产...还是在此术语中包含DLL?
Christian Ivicevic 2012年

我希望我也适合DLL,因为我有很多。
Bugster 2012年

我的第一个想法是找到一个合适的库((已过时...)zziplib,将我所有的常用资产存储在一个zip文件中,然后通过引擎自定义的内容管道将它们加载到我的游戏中。最初,您基本上是在寻找一种将zip文件中的文件加载到内存中以便能够在游戏中使用它们的方法。关于dll,这是非常困难的,因为它们通常必须与可执行文件位于同一目录中,或者建议将其放在WindowsSystem32目录中!提取并从那里运行的SFX存档如何?TEMP
Christian Ivicevic

3
您是否在询问如何使用安装程序?因为DLL不是资源。
Nicol Bolas 2012年

Answers:


13

您似乎在这里面临两个挑战:分销和资产包装。

分配

将整个应用程序打包到您认为合适的目录中,然后将顶级目录放入.zip文件中。分发该.zip文件。当用户解压缩zip时,他们将拥有一个文件夹,其中包含准备运行游戏所需的一切。

您如何放置文件?

  • 您的.dll通常需要与可执行文件位于同一目录(有例外,但是为了简单起见...)
  • 您的资产(图像,音频)可以在任何位置,尽管如果将它们移至可执行文件中,则必须修改资源加载代码以将其考虑在内。

我通常会这样:

MyGame \ //顶级目录包含整个程序
  bin \ // dll和编译后的exe一起放在此处
  res \ //游戏资源顶级目录
    音乐\
    声音特效\   
    语音\
  cfg \ //默认配置文件(用户配置位于用户目录中)
  MyGame.lnk //编译后的exe的快捷方式

资产包装

您可以使用某种压缩库(zlib,lzo)将所有游戏资源(上述res \目录)压缩到一个文件中。然后,您需要使用相同的压缩库实时提取资源内容,以将资产加载到游戏中。

然后,当您想修补资产时会发生什么?然后,您要么:编译一个全新的资产文件并将其分发给您的用户(这样他们本质上就是重新下载他们已经拥有的资源,以及少量的附加功能),或者您必须构建一个更新程序(另一个程序来维护) ),并处理可能出错的事实,并且您的资产文件将被损坏...

坦白地说,完成这项工作并非微不足道,而且我看不到您的情况会带来什么回报。一个简单的目录应该足以封装10个精灵,添加和修补东西要容易得多:只需将它们下载到正确的目录并完成。

构建安装程序

这是假设您的目标是Windows ...一旦您掌握了上述内容,就可以为您的游戏构建安装程序。我将不惜一切代价避免Visual Studio支持的ClickOnce方法。它不是您典型的Windows安装程序,它带有自己的一套怪癖。

看一下这个StackOverflow问题 -它包含一组有用的指向您可以使用的安装程序包的链接。如今,很多人似乎都喜欢WiX。我自己从未使用过它。此外,AdvancedInstallerInnoSetup都是流行的选择。


1
感谢您提供这个答案,现在我有了一个基本的想法,我应该如何分配我的游戏。
Bugster 2012年

1
不要使用WiX。它会伤到您的头部并杀死您的家人。
Ray Dey 2012年

1
还有另一种选择-可以有多个资产包。这样,诸如“ resources.pak,patch1.pak,patch1337.pak,..”之类的东西就可以存储补丁数据。无需修改原始程序包,只需使引擎能够检测和订购补丁程序包即可。
snake5

0

您也许可以静态链接某些库,而不是包括dll。每个库的是否以及如何都不一样。


-1

您可以使用Enigma之类的软件来打包文件并将其保存到单个.dat文件中。您需要更改启动器的文件夹。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.