我目前正在使用Cocos2dx C ++版本2.0.1。我知道这是cocos2dx的旧版本,但我最初开始使用它并且已经使用它完成了我的大部分游戏,我真的不想在此时切换版本。我目前遇到的问题是我的整个游戏有大约3首完整的歌曲,6种声音效果和很多纹理。我有大约4个精灵表使用.plist / .pvr方法,每个约70帧。现在我觉得我一定做错了,因为我觉得这么多游戏有更多的数据然后这样他们可以装得很好。我已经尝试了很多方法来有效地完成这项工作。我将描述每种方法以及每种方法遇到的问题。
我在应用程序启动时创建了一个加载屏幕,但我发现似乎没有办法异步加载.plist / .pvr所以我别无选择只能加载每个.PNG图像一个一个,不再使用精灵表。我觉得这是一种荒谬的方式,但我没有找到另一种解决方案。因此,通过使用这种方法,游戏确实加载(它需要一些时间,但确实有效),并且由于所有图像都预先加载,因此游戏运行顺畅。这里的问题是,当我点击主页按钮并点击我的游戏图标以恢复它需要花费大量时间来重新加载所有纹理,我需要等待很长时间才能恢复应用程序。为了解决这个问题,我尝试了以下方法:我了解了setPreserveEGLContextOnPause()以及如何在按下主页按钮时不会丢失纹理。所以我终于想出了如何设置它并且它实际上修复了问题,但我只使用了大约四分之一的精灵来测试它只是为了看看它使用了多少内存而且我看到它已经使用了345MB的RAM!这意味着我的完整游戏可能会使手机耗尽RAM。
在第一种方法发生的所有事故之后,我确信我做的事情非常糟糕,因为我没有看到一个安卓游戏在按下主页按钮后回来时遇到麻烦。我知道我使用了许多精灵,但我只能这么做了。我很想回到使用.plist / .pvr方法,但我似乎无法在呈现加载屏幕时找到加载这些文件类型的方法。
我也试过只是简单地加载每个场景的init方法。这也导致切换场景之间的时间延迟相同。
答案 0 :(得分:0)
1 *使用.mp3格式的声音。 2 *加载app委托中的所有纹理。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( gsd->getFullPath("name.plist")->getCString() )
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "name.plist" );
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "name.plist" );
#endif