【问题标题】:Cocos2d android Texture issue on Motorola xoom摩托罗拉 xoom 上的 Cocos2d android 纹理问题
【发布时间】:2011-12-26 07:10:51
【问题描述】:

我正在使用 Cocos2d 框架在 android 中开发一个游戏,最新版本来自 github(Weikuan Zhou)。

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

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

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

预期的输出是什么?你看到了什么呢? - 应该正确显示图像而不是 "BLACK BOX"

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

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

CCTextureCache.sharedTextureCache().removeAllTextures();

我也尝试过手动删除精灵。 removeChild() 方法。

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

如果有人对此有解决方案,请告诉我。

【问题讨论】:

  • 我也是同样的问题..如果你找到任何解决方案请告诉我!!!....

标签: android cocos2d-android xoom


【解决方案1】:

根据您的描述,您遇到的问题与我遇到的完全相同,即 cocos2d for android 在处理大量单独加载的单个精灵时确实存在问题。

解决此问题的最佳途径是从此处http://zwopple.com/zwoptex/static/downloads/zwoptex-flashversion.zip 获取(除非您有 Mac)zwoptex 的免费 flash 版本

这将让您构建精灵表,我建议将尽可能多的精灵关联到每张表上,同时尝试将它们合理地分组。

这主要是因为 cocos 对 spritesheet 中的所有 sprite 进行了一次渲染,而不是对普通 sprite 每个 sprite 进行一次渲染,因此大大减少了处理时间,并减少了内存使用量。

然后您可以使用以下代码加载 spritesheet(不能保证此代码会在我从结构化项目中获取 sn-ps 时执行,但它会引导您找到正确的解决方案)

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

【讨论】:

    【解决方案2】:

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

    1. 在游戏中使用精灵表获取资源。
    2. 在您的类的构造函数中实现您的 Ui。
    3. 在您的层中的重写方法 onEnter() 中实现您的功能。
    4. 您必须在完成场景后卸载精灵表。

    这些是我遵循的程序。 谢谢。

    【讨论】:

    • 编号列表项在句点后需要一个空格才能自动格式化:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多