我正在开发一款带有Cocos2d框架的Android游戏,最新版本来自github(Weikuan Zhou)。
在我的游戏中,我使用了大量图像(总图像大小约为11MB)。
问题: 当我玩游戏超过3次时,我得到了黑匣子而不是图像。
哪些步骤会重现问题? 1.当我通过游戏的“再次播放”功能玩我的游戏超过3次时。
预期产量是多少?你看到了什么呢?
- 图像应正确显示而不是"BLACK BOX"
。
在我的logcat中,我看到堆内存大约是13Mb。
CCTextureCache.sharedTextureCache()removeAllTextures();
我还试图手动删除精灵。 removeChild()
方法。
但到目前为止还没有成功找到任何解决方案。
如果有人解决此问题,请告诉我。
答案 0 :(得分:0)
从你所描述的内容来看,你遇到的问题与我所遇到的问题完全相同,这就是在处理大量单独加载的精灵时,cocos2d for android真的很麻烦。
解决此问题的最佳途径是从此处获取zwoptex的免费Flash版本(除非你有一台mac)http://zwopple.com/zwoptex/static/downloads/zwoptex-flashversion.zip
这将让你建立spritesheets,我建议将尽可能多的精灵与每张纸相关联,同时尽量将它们合理地分组。
这主要归功于cocos为spritesheet中的所有精灵执行单个渲染,而不是针对普通精灵每个精灵渲染一次,因此大大减少了处理时间,并且内存使用量更少。
然后您可以使用代码加载spritesheet(不能保证此代码将执行,因为我从结构化项目中获取片段,但它会引导您找到正确的解决方案)
CCSpriteFrameCache.sharedSpriteFrameCache().addSpriteFrames("menus.plist"); // loads the spritesheet into the frame cache
CCSpriteSheet menuSpriteSheet = CCSpriteSheet.spriteSheet("menus.png", 20); // loads the spritesheet from the cache ready for use
.... // menu is a CCLayer
CCSprite sprite = CCSprite.sprite(CCSpriteFrameCache.sharedSpriteFrameCache().spriteFrameByName("name of sprite from inside spritesheet.png"));
menuSpriteSheet.addChild(sprite, 1, 1); / you add the sprite to its spritesheet
menu.addChild(menuSpriteSheet, 1); // then add the spritesheet to the layer
答案 1 :(得分:0)
在运行时加载资源时会发生此问题。所以最好在场景开始之前加载资源。你可以这样做。
这是我正在遵循的程序。 感谢。