2014-01-05 5 views
0

Я пытаюсь реализовать кнопку включения/выключения в комплекте Sprite для музыкально-звуковых эффектов. Вот код для настройки кнопок:Кнопка включения/выключения Logic Sprite Kit

-(void)setUpSoundIcon{ 
    if (soundOrNoSound == YES) { 
     soundIcon = [SKSpriteNode spriteNodeWithImageNamed:[self imageNamed:@"sound"]]; 
     sound = 2; 
    }else if (soundOrNoSound == NO) { 
     soundIcon = [SKSpriteNode spriteNodeWithImageNamed:[self imageNamed:@"nosound"]]; 
     sound = 1; 
    } 
    soundIcon.name = @"Sound"; 
    if (screenWidth == 1024 && screenHeight == 768) { 
     soundIcon.position = CGPointMake(screenWidth - 50, 50); 
    }else if(screenHeight == 320){ 
     soundIcon.position = CGPointMake(screenWidth - 30, 30); 
    } 
    [soundIcon setZPosition:2000]; 
    [self addChild:soundIcon]; 
} 

Затем в методе touchesBegan у меня есть изменение значка изображения звука, чтобы представить музыку или выключить. Итак, моя проблема в том, что у меня есть фоновая музыка, играющая правильно, мне просто нужен способ увидеть, нажал ли пользователь значок звука, а затем убедиться, что музыкальные и звуковые эффекты не воспроизводятся, если пользователь не нажал звук значок включен. Мне нужен способ сделать это, чтобы он работал между несколькими классами. Спасибо!

ответ

1

Вот как я это сделаю. В начале прикосновения я проверил, нажата ли кнопка включения/выключения. Затем я бы переключил кнопку и изменил переменную BOOL для воспроизведения звука, а затем запустил/остановил музыку, которая воспроизводится. Было бы здорово, если бы у вас был отдельный класс для звука/музыки, который будет иметь переменную BOOL и методы воспроизведения/приостановки музыки и других музыкальных материалов. Но вы также можете сохранить эти значения в сцене или где-либо еще, но игровая часть будет полезна в отдельном классе. И я бы его так, у вас есть 2 спрайтов на сцене, один будет soundOnIcon другие soundOffIcon и вы можете сделать их скрытыми, когда они не должны быть видны

Вот немного кода, который я бы do:

-(void)toggleMusicSound 
{ 
    if([MusicPlayingClass soundOn]) 
    { 
    [MusicPlayingClass setSoundOn:NO]; 
    [MusicPlayingClass stopAllSounds];//this method will stop playing all continuous music and set other music logic if you want 
    [soundOnIcon setHidden:YES]; 
    [soundOffIcon setHidden:NO]; 
    } 
    else 
    { 
    [MusicPlayingClass setSoundOn:YES]; 
    [MusicPlayingClass playSounds];//it will start playing continuous music if it has to, and set other music logic if you want 
    [soundOnIcon setHidden:NO]; 
    [soundOffIcon setHidden:YES]; 
    } 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint positionInScene = [touch locationInNode:self]; 
    //check if your button is tapped 
    if(CGRectContainsPoint(soundIcon.frame, positionInScene)) 
    { 
    [self toggleMusicSound]; 
    } 
} 

Вот как бы я это сделал. Может быть, это помогает, но если вам понадобится еще несколько советов или объяснений, я буду рад помочь. :)