Настройки SFX / Music в представлении настроек и представлении игры должны совпадать со значениями BOOL. - PullRequest
0 голосов
/ 24 июля 2011

Я пытаюсь соединить кнопки SFX и Audio в моем представлении настроек с кнопками SFX и Audio в моем представлении игры, но у меня возникли некоторые проблемы.

проблемы

* Настройки кнопок в представлении настроек должны быть включены по умолчанию, когда пользователь впервые решает играть в игру, но будет сохранен, как только он решит изменить их на то, что он / она выберет для их установки. чтобы ... так что в следующий раз, когда игрок вернется к настройкам, независимо от того, будет ли он после окончания игры вручную игроком, завершится или войдет в фоновый режим из-за телефонного звонка и т. д., они все равно должны быть такими, как только игрок выбрал их на.

* настройки кнопок в представлении игры должны совпадать с однократными в представлении настроек и должны быть сохранены, если игрок решит их изменить. Поэтому в следующий раз, когда игрок войдет в окно настроек, он должен быть таким, каким он выбрал в игре.

Мне пока не удалось заставить это работать

У меня есть одноэлементный класс, который обрабатывает аудио игры, а затем у меня есть файл реализации, который обрабатывает как настройки, так и саму игру.

вот как я создал настройки звука для просмотра настроек и просмотра игры.

первая часть - код настроек

-(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];

    }


}

спасибо заранее!

1 Ответ

0 голосов
/ 24 июля 2011

Помните, что чтобы сохранить что-то в NSUserDefaults, вы должны использовать что-то вроде этого:

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

Убедитесь, что вы синхронизируете префы, когда хотите иметь возможность использовать их где-то еще.

Я бы синхронизировал настройки каждый раз, когда менял представления (или чаще).

Затем, когда вы хотите изменить значение звука / значение кнопки, загрузите логическое значение следующим образом:

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

Если вы понимаете это, то у вас должен быть доступ к правильному логическому значению.Должен быть торт, чтобы выяснить оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...