读书人

假如有1W张400amp;#215;400的图片摆到你面

发布时间: 2012-02-28 13:06:36 作者: rapoo

假如有1W张400×400的图片摆到你面前,你将如何组织这种图像?
若游戏中,时常需要同时显示200~500张的话,那么,你会如何组织呢?
1:磁盘如何存储,即设计成何种图像格式?
2:如何加载到内存,并渲染之?

BTW:需要保证的是,尽可能少的磁盘空间,以及游戏程序总内存不得超过300M

[解决办法]
光在内存里放这么多就已经那么大内存了,所以图片要放在显存,磁盘吗这个只能简单的打包,压缩。常用的不压缩。运行时解压必要的。

加载到显存或内存,看看direct2d
[解决办法]
内存使用肯定可以优化。
所有图片里,肯定有调用频繁的,也有较少用的,那后者可以边解压边贴图;
再说这500张大图里多少都有相似的部分,可以减少空间。
就算上两点都没用,那全部一起加载又能怎样,植物大战僵尸就是全部加载。普通的游戏占个300MB内存很正常。你那么多图片,用户肯定会理解的。


[解决办法]
用d3d的话(ddraw7应该没人用了吧)创建的纹理就是缓冲。。。

缓冲width/height选择能够包含你的图片的2^n大小就行了,要注意的是缓冲用pool_default创建,managed会消耗系统内存(因为d3d会备份数据)

缓冲可以多建点,反正是显存里面的。也可以给用户个设置,缓冲区一共多大

缓冲不用释放,交换时lock了,覆盖写就完事。

比如有40个角色缓冲,现在其中有部分没用了(部分角色离开视野),又来了个新角色要绘制。那么就在40个缓冲里面找最少用到的那个,把新角色解压进去,然后用这个缓冲画到屏幕上面。具体算法,可以加上每帧缓冲使用的次数,缓冲创建时间,需要交换时找计数最小,时间最早的干掉。其他优化自己想了



往屏幕上面画的永远是texture,不要去lock front/backbuffer,直接写屏超级影响效率

读书人网 >网络游戏

热点推荐