繁体   English   中英

Cocos2dx C ++处理许多纹理

[英]Cocos2dx C++ dealing with many textures

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

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

  2. 经过第一种方法的所有不幸之后,我真的确信我在做一个非常错误的事情,因为我还没有见过一个安卓游戏在按下“主页”按钮后无法返回时遇到麻烦。 我了解我正在使用许多精灵,但我只能将它们降低很多。 我很想回到使用.plist / .pvr方法,但是在显示加载屏幕时,似乎找不到找到这些文件类型的方法。

  3. 我也尝试过只是简单地为每个场景的init方法加载每件事。 这也导致切换场景之间的相同时间延迟。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM