多个动画精灵

问题描述:

这是创建单一的精灵,那么其动画代码:多个动画精灵

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"crowfl.plist"]; 
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"crowfl.png"]; 
[self addChild:spriteSheet]; 
NSMutableArray *crowAnimFrames = [NSMutableArray array]; 
for (int i=1; i<=8; i++) { 
    [crowAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"crow%d.png", i]]]; 
} 
CCAnimation *crowAnim = [CCAnimation animationWithSpriteFrames:crowAnimFrames delay:0.1f]; 
_crow = [CCSprite spriteWithSpriteFrameName:@"crow1.png"]; 
_crow.position = ccp(windowSize.width + _crow.contentSize.width/2, _crowFlightHeight); 
id crowAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:crowAnim]]; 
[_crow runAction:crowAction]; 
[spriteSheet addChild:_crow]; 
... 
id crowMoveAction = [CCSequence actions: 
        [CCMoveTo actionWithDuration:5.0 position:ccp(_flipCrow ? (windowSize.width + _crow.contentSize.width/2) : (-_crow.contentSize.width/2), _crowFlightHeight)], 
        crowMoveComplete, 
        nil]; 
[_crow runAction:crowMoveAction]; 

我需要的是创建多个精灵(_crow)和异步动画。我需要知道哪部分代码可以在多个精灵之间重复使用/共享,哪些部分应该对每个动画精灵都是唯一的。

缓存动画CCAnimationCache,并且一次又一次地降低了延迟加载:

CCAnimation* crowAnim = nil; 
crowAnim = [[CCAnimationCache sharedAnimationCache] animationByName:@"crowAnim"]; 

if(!crowAnim) 
{ 
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"crowfl.plist"]; 
    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"crowfl.png"]; 
    [self addChild:spriteSheet]; 
    NSMutableArray *crowAnimFrames = [NSMutableArray array]; 
    for (int i=1; i<=8; i++) { 
     [crowAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"crow%d.png", i]]]; 
    } 

    crowAnim = [CCAnimation animationWithSpriteFrames:crowAnimFrames delay:0.1f]; 

    [[CCAnimationCache sharedAnimationCache] addAnimation:crowAnim name:@"crowAnim"]; 

} 

_crow = [CCSprite spriteWithSpriteFrameName:@"crow1.png"]; 
_crow.position = ccp(windowSize.width + _crow.contentSize.width/2, _crowFlightHeight); 
id crowAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:crowAnim]]; 
[_crow runAction:crowAction]; 
[spriteSheet addChild:_crow]; 
... 
id crowMoveAction = [CCSequence actions: 
        [CCMoveTo actionWithDuration:5.0 position:ccp(_flipCrow ? (windowSize.width + _crow.contentSize.width/2) : (-_crow.contentSize.width/2), _crowFlightHeight)], 
        crowMoveComplete, 
        nil]; 
[_crow runAction:crowMoveAction]; 
+1

实际上我可以用'crowAnim'作为类的成员,并创建一次,但这个例子可以帮助我识别动画需要创建一次。谢谢 – Pablo