- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Cocos2d 中我将播放一个动画。动画大概有12帧,每一帧都比较大。事实上,每一帧的-hd版本都相当庞大。
无论如何,首先,我通过使用 Zwoptex 将所有 12 帧放入纹理中来创建它。纹理大约为 2048x2048。
这样我就可以使用该纹理在 CCSpriteBatchNode 中为 CCSprite 设置动画。
但我似乎收到了 2 级内存警告。
现在我想起来了,我认为 CCSpriteBatchNode 不应该用于一个 Sprite 。我猜它只有在您想绘制大量使用相同纹理的 Sprite 时才有用。
所以我想知道:我应该逐帧动画 Sprite (没有巨大的纹理)吗?或者是否有可能以不同的方式使用那个巨大的纹理?
最佳答案
关于 CCSpriteBatchNode,你是对的。CCSpriteBatchNode 就像一个批处理节点:如果它包含子节点,它将在 1 个单独的 OpenGL 调用中绘制它们(通常称为“批量绘制”),如果没有 CCSpriteBatchNode(在这种情况下),所有“批量绘制”将被称为 child ( Sprite )数量的很多倍。
CCSpriteBatchNode 可以引用一个且仅一个纹理(一个图像文件,一个纹理图集),即由 zwoptex 创建的 Sprite 表。只有包含在该纹理中的 CCSprite 才能添加到 CCSpriteBatchNode。添加到 CCSpriteBatchNode 的所有 CCSprite 都在一次 OpenGL ES 绘制调用中绘制。如果 CCSprite 未添加到 CCSpriteBatchNode,则每个 CCSprite 都需要一个 OpenGL ES 绘制调用,效率较低。
根据您的场景,您不必使用 CCSpriteBatchNode,因为在任何给定时间只渲染一个纹理。
So I want to know: Should I animate the sprite frame by frame (no huge texture)? Or is it possible to use that huge texture but in a different way?
没关系。无论如何,您将加载 2048 x 2048 纹理。需要思考的问题是,为什么只有一个 2048 x 2048 纹理给您 2 级警告?你加载了多少这样的纹理。顺便说一句,2048 x 2048 仅在以上 iPod3G/iPhone3GS 上受支持(没问题)。
如果你正在加载许多纹理(这对我来说似乎是真的)。您需要编写一些逻辑,以便在不需要时可以卸载纹理。请查看以下方法:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
就动画而言,您可以创建 CCAnimation 并使用它,或者(取决于您的场景)您可以使用 setDisplayFrame(CCSpriteFrame frame);
关于objective-c - 什么时候使用 CCSpriteBatchNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549266/
如何在使用 spritesheet 时创建由多个子 Sprite 组成的 CCSprite? 例如,我的游戏有一个具有多个框架的向导。他被吸引到包含他所有帧的 CCSpriteBatchNode。我想
在 Cocos2d 中我将播放一个动画。动画大概有12帧,每一帧都比较大。事实上,每一帧的-hd版本都相当庞大。 无论如何,首先,我通过使用 Zwoptex 将所有 12 帧放入纹理中来创建它。纹理大
我正在修改我在 Learn Cococs2D 上找到的一些教程并发现每当我在一个类中使用多个 CCSpriteBatchNode 时,帧速率就会下降。 阅读了一下,我了解到一个 CCSpriteBat
我正在使用 CCSpriteBatchNode 基本上一次绘制一个像素的线条(使用 1x1 样本)。我需要这样做,因为用户正在实时控制线条的走向(它不是绘图应用程序,但我认为我正在做的事情是可比的)。
我目前正在开发一款在 iOS 环境下使用动画的简单游戏。我有一个 .png 文件 其中包含与动画相关的所有帧。我有一些疑问: 是否可以直接使用此图像来提取创建 CCSpriteBatchNode 所需
有人会考虑以下场景并给我一个建议吗:我正在用一个 GameplayLayer 实现一个基本的 cocos2d 游戏,它有一个 CCSpriteBatchNode。我有一个 GameObject:CCN
我正在尝试向我的 cocos2d iOS 游戏添加粒子效果。我在向 Sprite 添加粒子时遇到问题,因为我的所有 Sprite 都使用 Sprite 批处理来提高性能。因此,我似乎无法轻松地在我的
问题不言自明,我再次需要在 cocos2d android 中使用 CCSpriteBatchNode 感谢任何帮助。 最佳答案 CCSpriteBatchNode是重命名的CCSpriteSheet
当我将 CCSpriteFrameCache 或 CCSpriteBatchNode 添加到我的 cocos2d 应用程序时,我不明白我到底做了什么。谁能解释一下以下几点(如果你能解释一些会很有帮助,
在尝试使用 Texture Packer 和许多 sprite 创建纹理图集时,我收到了 Texture Packer 错误“8 not fitting sprites - try using mul
我有一个 CCSpriteBatchNode 添加到我的场景中。 我有一个使用“initWithSpriteFrameName”创建的 CCSprite,然后我将它添加到我的批处理节点。 Sprite
我正在尝试使用 CCSpriteBatchNode 一次渲染多个 Sprite 来优化我的游戏。但是,由于某种原因,当我将 CCSpriteBatchNode 作为我的 Sprite 的父级时,coc
我正在创建一个游戏,它会多次实例化某种类型的 Sprite 。这个 Sprite 将有一个简单的循环动画,因此,我假设我需要使用 CCSpriteFrameCache 和 CCSPriteBatchN
我有一个配置如下的 CCSpriteBatchNode: CCSpriteBatchNode ChildA1 ChildB1 ChildB2 .
这是我收到的错误: * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“CCSprite:setTexture 在使用 CCSpriteBa
我对 Cococs2dX CCBatchNode 有疑问。下面你可以看到我的部分源代码: _batchNode = CCSpriteBatchNode::batchNodeWithFile("Spri
我使用了 Zwoptex Flash 版本来生成: 带有 -hd 后缀的 .png 纹理文件(双倍尺寸的图像) 没有 -hd 后缀的 .png 纹理文件(正常大小的图像) 带有 -hd 后缀的 .pl
我是一名优秀的程序员,十分优秀!