2011-07-24 5 views
0

SFXとオーディオボタンを自分のゲームビューのSFXとオーディオボタンで設定ビューに接続しようとしていますが、問題。設定ビューとゲームビューのSFX /音楽設定が一致する必要がありますBOOL値

問題は、初めてのユーザーがゲームをプレイすることを決定したが、すぐに、彼は何にそれらを変更することを選択したとして保存されます時に設定ビューでボタンの設定がデフォルトでONする必要があります*

ですプレイヤーが手作業で終了した後であっても、電話機などでバックグラウンドで終了するかどうかに関係なく、次回に設定に戻るときは、プレーヤーがそれらを持っていたことを一度選んでください。

*ゲームビューのボタン設定は、設定ビューの1回と一致する必要があります。プレイヤーが設定を変更する場合は、保存する必要があります。プレイヤーが次回に設定ビューに入るときは、ゲームの中で一度選択しなければなりません。

は、私は、これは

私はゲームのオーディオを扱うシングルトンクラスを持っているし、私は設定だけでなく、ゲーム自体を扱う実装ファイルを持って仕事を得るために、これまで管理していません。

ここでは、設定ビューとゲームビューの両方のオーディオ設定を作成しました。

最初の部分は設定コード

-(IBAction)options{ 
    saveBackAudioON = [[NSUserDefaults standardUserDefaults] boolForKey:kSaveBackAudioON]; 

    saveSFXAudioON = [[NSUserDefaults standardUserDefaults] boolForKey:kSaveSFXAudioON]; 

    NSLog(@"Options"); 
    OptionsHeadtitle.hidden = NO; 
    Start.hidden = YES; 
    option.hidden = YES; 
    howtoplay.hidden = YES; 
    filter.hidden = NO; 

    SFXimage.hidden = NO; 
    Musicimage.hidden = NO; 

    credits.hidden = NO; 
    back.hidden = NO; 
    newgame.hidden = YES; 
    continuegame.hidden = YES; 

    [self SFXswap]; 
    [self MUSICswap]; 
} 
-(IBAction)SFXswap{ 
    BOOL buttonstate = [SingletonSoundManager isSFXOn]; 
    [SingletonSoundManager setSFXOn:!buttonstate]; 

    if(buttonstate){ 
     NSLog(@"SFX Stops"); 
     sfx1.hidden = buttonstate; 
     sfx2.hidden = !buttonstate; 
    } 
    else if(!buttonstate){ 
     NSLog(@"SFX Starts"); 
     sfx1.hidden = buttonstate; 
     sfx2.hidden = !buttonstate; 
    } 
} 
-(IBAction)MUSICswap{ 
    BOOL buttonstate = [SingletonSoundManager isMusicOn]; 
    [SingletonSoundManager setMusicOn:!buttonstate]; 

    if(buttonstate){ 
     NSLog(@"Music Stops"); 
     music1.hidden = buttonstate; 
     music2.hidden = !buttonstate; 
    } 
    else if(!buttonstate){ 
     NSLog(@"Music Starts"); 
     music1.hidden = buttonstate; 
     music2.hidden =!buttonstate; 
    } 
} 

であり、この部分はゲームビュー内の設定を事前に

-(void)begingame{ 


    Pause.enabled = YES; 
    musicbutton1.enabled = YES; 
    musicbutton2.enabled = YES; 
    sfxbutton1.enabled = YES; 
    sfxbutton2.enabled = YES; 

    Clock.hidden = NO; 

    Pause.hidden = NO; 

    totalSeconds = 300; //for 5 minutes 

    //Countdown for ongoing game 
    countdowntimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(clockcountdown) userInfo:nil repeats:YES]; 

    //If music is on the play background music 
    BOOL BackgroundMusicbuttonstate = [SingletonSoundManager isMusicOn]; 
    [SingletonSoundManager setMusicOn:!BackgroundMusicbuttonstate]; 

    //show which state the audio is on, if it´s enabled or disabled from the beginning 
    if(!BackgroundMusicbuttonstate){ 
     musicbutton1.hidden = BackgroundMusicbuttonstate; 
     musicbutton2.hidden = !BackgroundMusicbuttonstate; 

    } 

    //Play background music if the music is enabled from the beginning 
    //if(musicbutton1.hidden == NO && musicbutton2.hidden == YES){ 
    if(musicbutton1.hidden == NO){ 
     [sharedSoundManager playMusicWithKey:@"Background" timesToRepeat:-1]; 
     newGame = YES; 
    } 
    //else if(musicbutton1.hidden == YES && music2.hidden == NO){ 
    else{ 

     [sharedSoundManager pausePlayingMusic]; 
    } 

    BOOL SFXbuttonstate = [SingletonSoundManager isSFXOn]; 
    [SingletonSoundManager setSFXOn:!SFXbuttonstate]; 

    //show which state the SFX is on, if it´s enabled or disabled from the beginning 
    if(!SFXbuttonstate){ 
     sfx1.hidden = SFXbuttonstate; 
     sfx2.hidden = !SFXbuttonstate; 

    } 

    //Play SFX if SFX is enabled from the beginning 
    if(SFXbuttonstate){  
     newGame = YES; 
    } 

    if(sfxbutton2.hidden == NO){ 
     [sharedSoundManager stopPlayingSFX]; 
    } 

    newGame = NO; 
    isbrickdissapearing = NO; 

    rubin1.center = CGPointMake(rubin2.center.x, rubin2.center.y); 

    [self.view addSubview:rubin1]; 

} 
-(IBAction)SFX{ 

    BOOL buttonstate = [SingletonSoundManager isSFXOn]; 
    [SingletonSoundManager setSFXOn:!buttonstate]; 

    if(buttonstate){ 
     NSLog(@"SFX Stops"); 
     sfxbutton1.hidden = buttonstate; 
     sfxbutton2.hidden = !buttonstate; 
    } 
    else if(!buttonstate){ 
     NSLog(@"SFX Starts"); 
     sfxbutton1.hidden = buttonstate; 
     sfxbutton2.hidden = !buttonstate; 
    } 


} 

-(IBAction)MUSIC{ 

    BOOL buttonstate = [SingletonSoundManager isMusicOn]; 
    [SingletonSoundManager setMusicOn:!buttonstate]; 

    if(buttonstate){ 
     NSLog(@"Music Stops"); 
     musicbutton1.hidden = buttonstate; 
     musicbutton2.hidden = !buttonstate; 
     [sharedSoundManager pausePlayingMusic]; 

    } 
    else if(!buttonstate){ 
     NSLog(@"Music Starts"); 
     musicbutton1.hidden = buttonstate; 
     musicbutton2.hidden = !buttonstate; 

     [sharedSoundManager resumePlayingMusic]; 

    } 


} 

感謝です!あなたはどこか別の場所にそれらを使用できるようにしたいときは、環境設定を同期していることを確認してください

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:!previousValue forKey:@"soundOn"]; 
// NSLog(@"mainPadOptions.mainOptions: %@", mainPadOptions.mainOptions); 
[prefs synchronize]; 

答えて

0

は、あなたがこのようなものを使用する必要があり、NSUserDefaultsに何かを保存することを忘れないでください。

ビューを変更するたびに(またはより頻繁に)環境設定を同期したいと思います。あなたは、あなたが正しいブール値へのアクセス権を持つべきである、ということを理解している場合

BOOL soundFXOn = [[[NSUserDefaults standardUserDefaults] objectForKey:@"soundOn"] boolValue]; 

:あなたがそうのようなブール値をロードし、音値/ボタン値を変更したいその後

、。そこから理解するにはケーキでなければならない。

+0

Hey!早速のご返事ありがとうございます。私もそれを試しましたが、代わりにクラッシュするゲームがあります:( – peteriphonenoob

+0

クラッシュを引き起こした機能を投稿できますか?認識できないセレクターの行に沿って何かを言うすべてのジャンボの前の部分です。私はNSNumberにブール値をラップしました。あなたはこれを行う必要はありません。単にsetObjectForキーではなくsetBoolForキーを使用してください。 –

関連する問題