如何在Cocos2D中创建出色的角色动画?

时间:2013-05-28 10:25:00

标签: animation cocos2d-iphone

这是我为插入场景中的敌人创建动画的实现。

CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];    
CCAnimation *animation = [CCAnimation animation];
[animation addSpriteFrame:[cache spriteFrameByName:@"enemy_1.png"]];
[animation addSpriteFrame:[cache spriteFrameByName:@"enemy_2.png"]];
animation.delayPerUnit = 0.1;
[_enemy runAction:
 [CCRepeatForever actionWithAction:
  [CCAnimate actionWithAnimation:animation]]];

这只是如何实现动画的一个例子。 例如,如果我有一个由几个部分组成的“Boss”,我想在身体的不同部位制作非常古怪的动画。

有没有办法比连续替换图像更顺畅地创建动画?

计算上,这是你能做的最好的,还是有更高效的技术?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

一个接一个地加载多个图像是在cocos2d中“动画”的唯一方法。当然,对于可以在数学上定义的各种效果,您可以使用框架内提供的函数(如旋转,调整大小,移动或基于物理的动画,如下降或弹跳)

如果你的艺术家提供了一个带有流动的逐帧动画的干净精灵表,你会对动画的外观平滑感到惊讶。

答案 1 :(得分:1)

//if you are using spritesheet then use this...for loading or sprites in your game...

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"walkcycle.plist"] ;
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"walkcycle.png"];
[heroWorldLayer addChild:spriteSheet];

NSMutableArray *enemyFrames = [NSMutableArray array];
for(int i = 1; i <= 11; ++i) {
    CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Run_Anim00%02d.png", i]];
    [enemyFrames addObject:frame];
}
id enemyAnim = [CCAnimation animationWithFrames:enemyFrames delay:1.0/22.0];
id enemyAnimate = [CCAnimate actionWithAnimation:enemyAnim restoreOriginalFrame:NO];

 id _runAction = [CCRepeatForever actionWithAction:enemyAnimate];
[_enemy runAction:_runAction];