Posted on 2010-05-12 23:26
魔のkyo 阅读(308)
评论(0) 编辑 收藏 引用
在Xbox360和PS3上都有对游戏启动时间的要求,这里说的启动时间是指游戏开始启动到第一帧画面出现的时间,它包括程序被系统加载到内存的时间和程序本身的初始化和必要的资源加载。
就以Xbox360为例,在Xbox360上要求的时间是小于5秒,当游戏的可执行文件本身的体积很大时,满足这条要求将变得很困难。首先检查从游戏启动到main函数的消耗时间,如果这个时间超过5秒那么必须做的事就是减小可执行文件的体积,
·将容易分离的代码做成DLL,在游戏启动后再加载
·将容易分离的数据做成DLL或者BIN文件,在游戏启动后再加载
·检查是否有全局对象的构造耗时较长,将不必要在构造函数中做的事放到Initialize()中之后再做。如果确实有耗时较长的全局对象构造而又不容易改造,那么可以将渲染设备的创建和必要资源的加载移动到这个全局对象构造的首部(这是有一定风险的),同时在Microsoft的编译器上可以通过#pragma init_seg(*)来调整构造的时间以及处理依赖关系。
·将可以并行的初始化代码分在线程中执行,资源加载做成异步,在资源真正用到之前进行Wait。
尝试过但没有使用的方法:
·开多个线程同时加载资源。没有使用的原因:一般情况IO操作是不能并行的,所以一个线程就够了,开10个线程同时读10个文件并不会比在一个线程里顺序地读10个文件来的快,反而会慢一点。
·把原本的可执行文件编译为DLL,使用一个小型的EXE在启动后加载这个DLL,并执行原来的main函数。没有使用的原因:在360上加载的DLL大小有限制,如果可执行文件大到超过5秒加载时间,必然不能被作为DLL加载,而且360上编译出的游戏可执行文件需要绑定一些XLAST生成的.spa之类的,不确定这些东西应该和DLL编译在一起还是XEX编译在一起,那些XDK的API在这种情况下是否正常也不能确定。