摩托罗拉xoom上的Cocos2d android纹理问题

时间:2011-12-26 07:10:51

标签: android cocos2d-android xoom

我正在开发一款带有Cocos2d框架的Android游戏,最新版本来自github(Weikuan Zhou)。

在我的游戏中,我使用了大量图像(总图像大小约为11MB)。

问题: 当我玩游戏超过3次时,我得到了黑匣子而不是图像。

哪些步骤会重现问题? 1.当我通过游戏的“再次播放”功能玩我的游戏超过3次时。

预期产量是多少?你看到了什么呢? - 图像应正确显示而不是"BLACK BOX"

在我的logcat中,我看到堆内存大约是13Mb。

  • 我已经通过以下方法发布了纹理
  

CCTextureCache.sharedTextureCache()removeAllTextures();

我还试图手动删除精灵。 removeChild()方法。

但到目前为止还没有成功找到任何解决方案。

如果有人解决此问题,请告诉我。

2 个答案:

答案 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)

在运行时加载资源时会发生此问题。所以最好在场景开始之前加载资源。你可以这样做。

  1. 将精灵表用于游戏中的资源。
  2. 在班级的构造函数中实现你的Ui。
  3. 在图层中的重写方法onEnter()中实现您的功能。
  4. 您必须在完成场景后卸载精灵表。
  5. 这是我正在遵循的程序。 感谢。