我目前使用的是 Cocos2dx C++ 2.0.1 版。我知道这是 cocos2dx 的旧版本,但我最初开始使用它并且已经用它制作了我的大部分游戏,我真的不想在这个时候切换版本。我目前遇到的问题是我的整个游戏有大约 3 首完整的歌曲、6 种音效和大量的纹理。我有大约 4 个使用 .plist/.pvr 方法的 Sprite 表,每个大约有 70 帧。现在我觉得我一定是做错了什么,因为我觉得很多游戏的数据都比这个多得多,而且它们可以很好地加载。我已经尝试了很多方法来使这项工作有效进行。我将描述每种方法以及每种方法遇到的问题。
我在应用程序启动时制作了一个加载屏幕,但我发现似乎无法异步加载 .plist/.pvr,所以我别无选择,只能加载每个 .PNG 图像一个,不再使用 Sprite 表。我觉得这是一种荒谬的方式,但我还没有找到另一种解决方案。所以通过使用这种方法,游戏确实会加载(这需要一些时间,但它确实有效)并且由于所有图像都已预加载,所以游戏运行顺利。这里的问题是,当我按下主页按钮并点击我的游戏图标以恢复时,重新加载所有纹理需要花费大量时间,并且在应用程序恢复之前我需要等待很长时间。为了解决这个问题,我尝试了以下方法:我了解了 setPreserveEGLContextOnPause() 以及如何在按下主页按钮时使纹理不丢失。所以我终于想出了如何设置它并且它实际上解决了问题但是我只使用了大约四分之一的 Sprite 来测试它只是为了看看它使用了多少内存并且我看到它已经使用了 345MB 的 RAM!这意味着我的完整游戏可能会使手机内存不足。
在第一种方法发生所有事故之后,我真的确信我做错了什么,因为我还没有看到一款安卓游戏在按下主页按钮后无法返回。我知道我使用了很多 Sprite ,但我只能将它们降低很多。我很想回到使用 .plist/.pvr 方法,但我似乎找不到在显示加载屏幕时加载这些文件类型的方法。
我也尝试过简单地加载每个场景初始化方法中的每个东西。这也会导致切换场景之间的时间延迟。
总的来说,我真的被困住了。我觉得我一定做错了什么,因为我的游戏是一款非常简单的益智游戏,无论如何都不大。我还想找到适用于 iPhone 和 Android 手机的解决方案。任何帮助将不胜感激。谢谢。
最佳答案
1* 声音使用 .mp3 格式。 2* 像这样在应用程序委托(delegate)中加载所有纹理。
#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
关于android - Cocos2dx C++ 处理许多纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372083/