3

私のゲームには 3 つの BGM があります。ipod の音楽が再生されているときに、ゲームでバックグラウンド ミュージックをオフに設定したいと思います。それ以外の場合は、最後に再生された音楽が再生されます。muser が iPod の音楽をオンにして音楽を変更すると、iPod の音楽が消えてバックグラウンド ミュージックが再生されます。問題は、これを2 回目にしようとすると (音楽を iPod からゲーム内に変更する)、最初の曲は再生されますが、他の 2 曲は再生されないことです。

これはばかげた振る舞いであり、問​​題を解決しようとしてもうまくいきません。これが私の現在のコードです....

drawRect ループ内:

//Music toggle
                        if(music_active == 0){
                            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];
                            [[AVAudioSession sharedInstance] setActive:YES error:NULL];
                            [background_music play];
                            music_active++;
                        }else if(music_active == 1){
                            [background_music pause];
                            [background_musicB play];
                            music_active++;
                        }else if(music_active == 2){
                            [background_musicB pause];
                            [background_musicC play];
                            music_active++;
                        }else{
                            [background_musicC pause];
                            music_active = 0;
                        }

startAnimation メソッドで:

UInt32 size,result;
        size = sizeof(result);
        AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying,&size,&result);
        if(!result){
            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];
            [[AVAudioSession sharedInstance]  setActive:YES error:NULL];
            [background_music prepareToPlay];
            [background_musicB prepareToPlay];
            [background_musicC prepareToPlay];
            if(music_active == 1){
                [background_music play];
            }else if(music_active == 2){
                [background_musicB play];
            }else if(music_active == 3){
                [background_musicC play];
            }
        }else{
            music_active = 0;
        }

stopAnimation メソッドで:

[background_music stop];
        [background_musicB stop];
        [background_musicC stop];
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:NULL];
        [ [AVAudioSession sharedInstance] setActive:NO error:NULL];

initWithCoder メソッドで:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];

このメソッドは、サウンド ファイルも読み込み、ループ数を -1 に設定します。もちろん、AVAudioPlayer を使用します。

助けてくれてありがとう。

4

0 に答える 0