Animation 将声音与cocos2d 2.x动画中的帧同步*

Animation 将声音与cocos2d 2.x动画中的帧同步*,animation,cocos2d-iphone,synchronization,audio,Animation,Cocos2d Iphone,Synchronization,Audio,如何将音效与动画同步(动画) 我可以在animationframes数组中添加调用块吗 或者,如果CCAnimationFrame在激活时有一个可选的回调/委托,它也可以工作。好的,我们所要做的就是: 遵守通知CCAnimationFrameDisplayedNotification。 它在被激活的精灵上被调用 为了 要广播通知,需要添加词典 到要挂接的CCSpriteFrame。我加了一本字典 包含所有精灵框架的每个精灵的精灵框架名称 因为我需要把它们都勾起来,但我想字典可以 也可以是空的,只

如何将音效与动画同步(动画)

我可以在animationframes数组中添加调用块吗


或者,如果CCAnimationFrame在激活时有一个可选的回调/委托,它也可以工作。

好的,我们所要做的就是:

  • 遵守通知CCAnimationFrameDisplayedNotification。 它在被激活的精灵上被调用

  • 为了 要广播通知,需要添加词典 到要挂接的CCSpriteFrame。我加了一本字典 包含所有精灵框架的每个精灵的精灵框架名称 因为我需要把它们都勾起来,但我想字典可以 也可以是空的,只是不要
    nil

        animationframe = [[[CCAnimationFrame alloc] initWithSpriteFrame:[cache spriteFrameByName:str] delayUnits:1 userInfo:nil] autorelease];
        animationframe.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:str, @"spriteframename", nil];
        [animationframes addObject:animationframe];
    
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(frameupdatedinbootanimation:) name:CCAnimationFrameDisplayedNotification object:NULL];
    
  • 然后抓住它

    -(void)frameupdatedinbootanimation:(id)hmm {
        NSLog(@"frameupdatedinbootanimation: %@", hmm);
        Do something here
    

    目前我发现:将根据文档尝试。ymmv:我在游戏的一个关键方面尝试过(例如,在攻击者动画第9帧上同步一个fx)。特别是在模拟器中,FPS是一个随机数,并且通常没有发布通知。我推断这是因为帧实际上被跳过了。。。所以我最终离开了它。有一个文档(除了源注释之外)?无论如何,我也使用这种方法来调整精灵的位置,因为我的设计师给我发送了每个帧不同的原点。嗯。所以我最终在那里制作了一个小API(dic中的pos键意味着原点更改),因为每个通知只能有一个处理程序。这让我希望有人有一天也能把它加入到CCAction流中。哈哈,这只是对文档的一种“恶作剧”。不,娜达,零,朋友!无论如何,如果您所做的只是调整每帧的内容(位置、透明度等),并且需要做的事情的性质在字典(ergoapi)中,那么它将适合您。如果你需要做一些对游戏至关重要的事情(就像我做的那样),避免这样做。
    -(void)frameupdatedinbootanimation:(id)hmm {
        NSLog(@"frameupdatedinbootanimation: %@", hmm);
        Do something here