Cocos2d动画第一次延迟

时间:2012-02-16 04:47:57

标签: iphone objective-c

在coco2d中 - 当我第一次有动画有一个小延迟,但第二次动画时,它会完美(没有延迟),如何克服这个问题

我的代码在

之下

- (void)animateImages:(NSString )animationName startImageName:(NSString )sImage individualImageName:(NSString *)imgName withDelay:(CGFloat)delay startFrame:(NSInteger)sFrame endFrame:(NSInteger) eFrame {     isAnimating = YES;

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"%@.plist",animationName]];        

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"%@.png",animationName]];

[self addChild:spriteSheet z:0];

// Load up the frames of our animation
NSMutableArray *walkAnimFrames = [NSMutableArray array];
for(int i = sFrame; i <= eFrame; i=i+2) {
    [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%@ %d.jpg",imgName,i]]];//@"stand march %d.jpg"
}


NSLog(@"After NSMutableArray");


CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:delay];

CCAction *standByAtion =[CCSequence actions:                          
                         [CCRepeat actionWithAction:[CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO] times:1],[CCCallFunc actionWithTarget:self selector:@selector(setAnimatingToFalseAfterAnimation:)],nil];


 [walkAnimFrames removeAllObjects];
 walkAnimFrames=nil;

CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *images = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"%@",sImage]];//@"stand march 101.jpg"

images.position=ccp(winSize.width/2,winSize.height/2);
images.scaleX=1.6;
images.scaleY=1.59;

[spriteSheet addChild:images];
[images runAction:standByAtion];

NSString *audioName=[NSString stringWithFormat:@"Jump.caf"];
[self playSoundEffectNamed:audioName];

}

提前致谢

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你想在单个动画中设置帧之间的不同延迟。如果你愿意,当你需要重复帧2次或更多次时。例如: 你有一个3帧的动画:第一个必须显示1秒,第二个 - 2秒,第3个 - 0.5秒。为此,制作延迟0.5秒的动画,添加两个第一帧,第四帧和第三帧。希望这有帮助。

答案 1 :(得分:0)

第一次通话时的延迟是因为图像的加载。

第一次调用它时,它确实会加载图像。这很慢。 第二次它不从磁盘加载它们但从缓存中读取已加载的图像。这很快。解决方案:在调用之前加载动画的所有图像。