【问题标题】:Cocos2d animations in main loop主循环中的 Cocos2d 动画
【发布时间】:2012-10-29 11:33:06
【问题描述】:

谁能给出最聪明的方法来制作主循环动画?我不想使用 CCAnimation,因为我想逐帧控制动画。

我是否应该将每个单独帧的精灵矩形(相对于精灵表)存储在一个数组中,然后在每个动画步骤中查找适合的矩形?我试图找出在 CCAnimation 中这是如何完成的,但我没有成功...

  1. 如何在初始化时获取每帧的矩形?
  2. 如何在每个动画步骤设置矩形?
  3. 我需要使用 CCSpriteBatchNode 吗?我想不会吧?

【问题讨论】:

    标签: cocos2d-iphone cocos2d-x


    【解决方案1】:

    无法理解,为什么您不想使用 CCAnimation,但无论如何,要获得您的问题的答案,您可以检查 CCSprite 实例的创建代码。然后,检查 CCSpriteFrame 实例的创建。在那里,您至少会找到第一个问题的答案。

    实际上,如果您只是想以与 CCAnimate 不同的方式管理动画帧,您可以存储 CCSpriteFrames 数组并根据需要显示它们(在 CCAnimate 动作中,这些帧只是在相等的时间间隔内一一更改)。

    如果你不想显示超过一帧的动画,你是否使用 CCSpriteBatchNode 没有区别。如果您需要绘制一个纹理的多个部分,它可以节省大量的处理器时间,因为它在一个 draw 调用中绘制它们,而不是向所有这些精灵发送 draw 消息。

    【讨论】:

      【解决方案2】:

      当您希望逐帧动画精灵时,我认为使用 CCSpriteBatchNode 会是一个更好的选择,因为它可以让您逐帧访问动画。使用“Zwoptex”之类的任何工具制作精灵 plist 将提供一种有效的动画方式CCSpriteBatchNode.

      希望您知道使用带有 CCSpriteBatchNode 的 plist 文件的动画。

      【讨论】:

        【解决方案3】:

        我从 Morions 的回答中得到灵感,做了以下事情: 游戏中的tick函数:

        _animationFrames.legFrame = (_animationFrames.legFrame + 1) % _animationFrames.legFrames.count;
        
        [_legs setDisplayFrame:  [_animationFrames.legFrames objectAtIndex: _animationFrames.legFrame]];
        

        在init函数中:

        CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode
                                          batchNodeWithFile:@"Player.png"];
        [self addChild:spriteSheet];
        
        _animationFrames.legFrames = [[NSMutableArray array] retain];
        for(int i = 0; i <= 15; ++i)
        {
          [_animationFrames.legFrames addObject:
           [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
            [NSString stringWithFormat:@"Player_legs-%d.png", i]]];
        }
        
        _legs = [CCSprite spriteWithSpriteFrameName:@"Player_legs-0.png"];
        [_sprite addChild: spriteSheet];
        [spriteSheet addChild:_legs z:1];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-06-19
          • 2019-07-30
          • 2014-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多