【问题标题】:Cocos2d play 2 different background music files or loop playEffectCocos2d 播放2种不同的背景音乐文件或循环播放效果
【发布时间】:2011-09-10 09:39:08
【问题描述】:

我需要有场景的背景音乐和角色的背景音乐,但是当角色做出一些动作时我必须停止它。

对于这个问题我不得不选择:

  1. 同时播放2个背景音乐文件,并停止与角色相关的一个
  2. 循环播放音效。

以下哪一项是可能且推荐的?

问候!

【问题讨论】:

    标签: ios objective-c cocoa-touch cocos2d-iphone


    【解决方案1】:

    你说你在使用 cocos2d,所以我假设你也在使用 cocos2d 提供的SimpleAudioEngine

    使用SimpleAudioEngine,无法播放 2 个背景曲目。可以通过一些小的修改来循环效果:

    • 提供-(int) playEffect:(NSString*) file loop:(BOOL) loop消息;
    • 在这个方法中,你需要了解正常的播放效果是什么。您正在寻找的是用作声音句柄的ALUInt。保留对此的参考。您需要它来停止循环。
    • 提供一个 -(void) stopEffectWithHandle:(int) handle 接收它并将其传递回 OpenAL 以停止效果。

    -编辑-

    下面是一些循环效果的代码:

    int handle = [[SimpleAudioEngine sharedEngine] playEffect:name];
    if (loop) {
        alSourcei(handle, AL_LOOPING, 1);
    }
    return handle;
    

    还有一些用于停止效果:

    [[SimpleAudioEngine sharedEngine] stopEffect:handle];
    

    【讨论】:

    • 我发现当你同时播放许多其他效果时,什么效果会在循环中停止。
    • 我认为这是因为CocosDension 对可以同时加载多少个声音是有限制的。
    • 在播放和停止声音近 32 次后,它停止工作。经过一番谷歌搜索后,我发现内存池已满。我需要以某种方式释放声音对象。该怎么做?
    【解决方案2】:

    @ToughGuy 对@JamesWebster 的评论是正确的,我在使用该解决方案时遇到了同样的问题。

    我使用this forum post 的这种方法解决了这个问题。

    播放效果:

    CDSoundSource *loopSound = [[SimpleAudioEngine sharedEngine] soundSourceForFile:LOOPING_SOUND_FILENAME];
    loopSound.looping = YES;
    [loopSound play];
    

    然后停止:

    [loopSound stop];
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多