cocos2d在场景转换期间加载了大小和总大小

时间:2011-10-26 15:31:31

标签: iphone objective-c cocos2d-iphone progress-bar

我正在进行一个进度条,以显示从场景1过渡时间内的当前进度 - >场景2 只是我的进度条值将基于当前加载的资源大小和加载场景2所需的总资源大小 但我不知道如何获得这两个值。请帮我。非常感谢。

1 个答案:

答案 0 :(得分:0)

什么是“资源大小”?

如果考虑图像文件,那么该图像文件在磁盘上的大小可能会也可能不会被压缩,压缩取决于文件内容。图像文件被加载到具有内存大小的纹理中。这也可能是压缩的(PVR)。最后,磁盘上的映像大小,压缩和内存表示(位深度等)都会影响加载该映像所需的时间。

如果将其扩展到声音文件,属性列表,数据库等其他资源类型,则根据一些任意的,难以定义的“资源大小”来控制进度条非常困难。

长话短说:你可以得到文件的大小。您可以将加载栏作为基础,但它根本不会反映实际的加载时间。

您还可以估算或计算资源占用的内存量,即2048x2048x32bit纹理为16 MB - 除非它甚至在内存中压缩(PVR纹理)。但这需要对每种资产的数据结构有深入的了解。另外,例如,如果你只加载其中四个纹理,你的进度条会在每个纹理后跳到25%,50%,75%和100% - 你无法知道“加载纹理的距离”设备是在这种情况下,使进度条顺利进行。

长话短说:

大多数进度条只考虑加载了多少资源。您可以从放入场景的代码中了解到这一点,即。你加载哪些图像,音频文件等。除非您从数据文件加载整个场景,例如,如果您使用某种设计工具,否则在加载之前您不会知道运行时的资源数量。

另一种方法是在每个资源块之后更新进度条,以便您可以将进度条进度划分为几个具体步骤。如果很少资源占用大部分时间,这是特别有用的,它们是原子块(即2048x2048纹理图集),需要几分之一秒才能加载,而不会更新进度条。

最后,除非你实际看到3秒以上的加载时间,否则进度条没什么意义。在这种情况下,您最好将时间花在优化加载时间上。例如,通过选择理想的纹理格式,使用纹理图集,避免冗余资产加载,推迟加载某些资产或将它们加载到单独的线程中,可以做很多事情。