主循环中的Cocos2D动画



任何人都可以提供任何最聪明的方法来执行主循环动画的方法吗?我不想使用ccanimation,因为我想通过框架控制动画。

我是否可以将每个单独的框架存储在每个动画步骤中的适合矩形中的sprite rect(相对于精灵表),然后查找适合的rect?我试图找出这是如何在CCanimation中完成的,但我没有成功...

  1. 如何在初始化时如何获得每个帧的矩形?
  2. 如何在每个动画步骤中设置RECT?
  3. 我需要使用ccspritebatchnode吗?我想不是,嗯?

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

实际上,如果您只想以不同的方式管理动画框架,则可以存储CCSpriteFrame的数组并按照您的需求显示(在Ccanimate Action中,这些框架仅在同等的时间间隔中一个一个一个一个一个更改)。

,如果您不想显示动画的一个以上的框架,那么您是否使用CCSpriteBatchNode没有区别。如果您需要绘制一个纹理的几个部分,它可以节省很多处理器的时间,因为它将它们绘制在一个draw调用中,而不是将draw消息发送到所有这些精灵。

当您想要逐帧动画精灵框架时,我认为使用ccspritebatchnode会是一个更好的选择,因为它可以通过框架访问动画为您提供框架。使用" zwoptex"等工具制造精灵的制作精神,将提供一种有效的方法来使用CCSpriteBatchNode。

希望您知道使用ccspritebatchnode的plist文件的动画。

我以莫里斯的灵感做了以下操作:在游戏刻度功能中:

_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];

最新更新