【问题标题】:Using setTexture for animating in Cocos2d?在 Cocos2d 中使用 setTexture 制作动画?
【发布时间】:2011-09-27 06:40:28
【问题描述】:

假设我的项目中有 120 个图像文件。我想为所有这些精灵制作动画。

我在想这个方法:

            CCSprite *temp = [CCSprite spriteWithFile:@"TheNextSprite.png"];
            [sprite setTexture:[temp texture]];

上面的代码每 0.03 秒运行一次。

sprite 是我的动画 CCSprite。 temp 只是一个临时的 CCSprite,用图像文件为下一个动画帧初始化,所以我可以稍后获取它的纹理。

这样有效吗?我听说我可以将 CCAnimate 与 CCSpriteBatchNode 一起使用,但这仅适用于单个精灵。另外,我有 120 个(大)帧 - 它们不适合 2048x2048 纹理画布。

【问题讨论】:

  • 120 个不适合 2048x2048 的大帧……您应该知道,加载大型精灵图像是一项相当昂贵的操作。如果您有这么多图像,您可能会遇到内存问题,除非您在每次使用后释放纹理。即使在 iPad 上也很难达到 60 fps。

标签: objective-c cocos2d-iphone


【解决方案1】:

查看CCAnimationCCAnimateCCSpriteFrame 类。

Sprite 帧是您试图模仿的内容,是精灵映射到的纹理的“一块”。它们最好与 spritesheet 结合使用,并非动画中的所有 sprite 都需要在同一个 sprite sheet 中。

CCAnimation 允许您根据这些帧序列创建动画。

CCAnimate 允许您将该动画作为动作运行:

[node runAction:[CCAnimate actionWithAnimation:animationInstance restoreOriginal:NO]];

【讨论】:

  • 嗯,我觉得这有点令人费解。所以我创建了一个包含 120 个 CCSpriteFrame 实例的数组?我该如何初始化它们,因为我最终会得到一个凌乱的 5+ 纹理文件?
  • 这里是CCSpriteFrame 的链接,了解如何初始化它。您可以存储 120 帧,具体取决于大小(我使用数百个较小的帧,使用大约 5 个 2048 * 2048 精灵表),但您应该担心会占用 RAM 多少空间以及它是否会影响性能
  • 但是假设我的 60 帧动画在 spritesheet1 中,另外 60 帧在 spritesheet2 中。我怎么知道什么时候开始使用第二个精灵表?在某处手动输入?
  • 您不需要告诉它您使用该方法使用的纹理。它会自动更改。
  • 但是每当我创建一个 CCSpriteFrame 时,都会要求我提供一个纹理参数。所以我不应该事先知道我想要的框架是哪个纹理吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多