1

我目前使用的是 Cocos2dx C++ 2.0.1 版。我知道这是 cocos2dx 的旧版本,但我最初开始使用它并且已经用它制作了大部分游戏,我真的不想在这个时候切换版本。我目前遇到的问题是我的整个游戏大约有 3 首完整歌曲、6 种音效和大量纹理。我有大约 4 个使用 .plist/.pvr 方法的精灵表,每个精灵表大约有 70 帧。现在我觉得我一定是做错了什么,因为我觉得很多游戏的数据比这个多得多,而且它们可以正常加载。我尝试了很多方法来有效地完成这项工作。我将描述每种方法以及我遇到的问题。

  1. 我在应用程序启动时制作了一个加载屏幕,但我发现似乎无法异步加载 .plist/.pvr 所以我别无选择,只能一张一张地加载每个 .PNG 图像,不再使用 sprite床单。我觉得这是一种荒谬的方式,但我没有找到另一种解决方案。因此,通过使用这种方法,游戏确实会加载(这需要一些时间,但它确实有效),并且由于所有图像都是预加载的,因此游戏运行顺畅。这里的问题是,当我点击主页按钮并点击我的游戏图标以恢复时,重新加载所有纹理需要很长时间,并且在应用程序恢复之前我要等待很长时间。为了解决这个问题,我尝试了以下方法:我了解了 setPreserveEGLContextOnPause() 以及如何在按下主页按钮时使纹理不丢失。所以我终于想出了如何设置它,它实际上解决了问题,但我只使用了大约四分之一的精灵来测试它,只是为了看看它使用了多少内存,我看到它已经使用了 345MB 的 RAM!这意味着我的完整游戏可能会使手机内存不足。

  2. 在第一种方法的所有不幸之后,我真的确信我做的事情非常错误,因为我还没有看到一个 Android 游戏在点击主页按钮后无法返回。我知道我正在使用许多精灵,但我只能将它们降低很多。我很想重新使用 .plist/.pvr 方法,但我似乎找不到在显示加载屏幕时加载这些文件类型的方法。

  3. 我也尝试过简单地按场景初始化方法加载每个东西。这也会导致切换场景之间的相同时间延迟。

总的来说,我真的被困住了。我觉得我一定做错了什么,因为我的游戏是一个非常简单的益智游戏,无论如何都不大。我还想找到一种适用于 iphone 和 android 手机的解决方案。任何帮助将不胜感激。谢谢。

4

1 回答 1

0

1* 使用 .mp3 格式的声音。2* 像这样在应用程序委托中加载所有纹理。

#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
于 2014-08-12T09:02:00.747 回答