我正在规划一个格斗游戏,但不确定如何解决与内存有关的问题。
背景信息:
- 还在考虑是使用C#(XNA)还是C++。在探索如何在两个语言中解决这个问题之前,我们不想承诺使用哪种语言。
- 如果可能,最大使用256MB RAM会很好。
- 每次只能有两个角色出现,并且这些角色只能在战斗之间更换。在战斗之间有时间来加载/释放内存,但游戏在战斗过程中需要以恒定的60帧每秒运行。每一帧为16.67毫秒。
- 每个角色的图像总数不到一百个。每个图像大约为200x400像素。任何给定时刻只能显示每个角色的一个图像。
根据我的计算,每个未压缩的图像大约需要300kb;整个角色需要100MB以上。由于还需要内存用于其他资源,这太接近256MB的限制了。
由于每个图像可以用16种颜色表示。如果我能利用这一点,理论上应该能够使用1/8的空间。我找过一些资料,但没有找到本机支持调色板图像的消息。(使用较少的位存储每个像素,并将其映射到32位RGBa颜色)
我们尝试使用DXT压缩,但是压缩伪影很明显。
我考虑制作自己的文件格式,每个像素使用4位(以及一些额外的调色板信息),在战斗之前将所有这种新格式的图像加载到RAM中,然后在绘制任何特定图像时,仅对该图像进行解压缩,以便可以正确呈现。我不知道每帧执行如此多的赋值操作(每个角色大约为200x400 = 160k)是否现实。 对我来说听起来很恶心。
有人对我的解决方案是否合理有建议,并且是否存在更好的解决方案?
非常感谢!
我尝试使用只有一个通道的图片,然后使用着色器进行一系列if语句操作将各种值转换为其他颜色。不幸的是,这个着色器的代码行数太多了。而且这个方法非常不规范,不利于扩展。