2009-07-18 21 views
0

Ich möchte eine Einstellung haben, um alle Sounds aus meinem Programm zu deaktivieren. Ich weiß, ich kann ein globales ivar setzen und wenn ich Anweisungen für jeden Ton schreibe, aber ich hatte gehofft, dass es etwas gab, das ich im appdelegate einstellen konnte, um alle Programmklänge zu deaktivieren.Deaktivieren Sie alle Programm-Sounds

Ich habe ein paar Spiele gespielt, mit denen Sie Spielklänge ausschalten können.

Ich verwende AVAudioPlayer für längere Clips und grundlegende Audio Service System Sounds für kurze Clips.

Antwort

0

Was verwenden Sie, um Sounds zu spielen? Ich denke, Sie könnten Sounds deaktivieren, indem Sie die Audiositzung deaktivieren - siehe AudioSessionSetActive.


Update: Ja, du hast Recht. Ich habe gerade versucht, die Audio-Session zu deaktivieren und die Sounds schienen weiter zu gehen. Vergiss es. Sie können den booleschen Flag-Ansatz verwenden, und es ist nicht notwendig, um jeden Sound herum eine Bedingung zu haben. Die Art, wie ich SFX in meinem Spiel mache, ist durch eine separate Klasse, eine Art "Ansicht", die das Modell beobachtet und Klänge für verschiedene Spielereignisse erzeugt. Auf diese Weise behalten Sie eine saubere Trennung von Bedenken im Design und wenn Sie die Sounds ausschalten möchten, trennen Sie einfach die Soundklasse vom Modell. Der Code sieht ein bisschen wie folgt aus:

@implementation Model 

- (void) stepBy: (double) seconds 
{ 
    [player doSomething]; 
    if (player.isDead) 
     [self sendNotification:@selector(playerHasDied:) withObject:player]; 
} 

@end 

Und der Sound Ansicht:

@implementation SFX 

- (void) playerHasDied: (id) player 
{ 
    [aarghSound play]; 
} 

@end 

Natürlich kann man die tatsächliche Beobachtung Teil zu implementieren. Sie könnten NSNotificationCenter oder schreiben Sie Ihre eigene Dispatching-Code unter Verwendung einer Reihe von Beobachtern verwenden:

@implementation Model 

- (void) addObserver: (id) object 
{ 
    [observers addObject:object]; 
} 

- (void) sendNotification: (SEL) message 
{ 
    for (id observer in observers) 
     if ([observer respondsToSelector:message]) 
      [observer performSelector:message]; 
} 

@end 

Die SFX Ansicht ist mit dem Modell verbunden:

Model *model = [[Model alloc] init]; 
SFX *sounds = [[SFX alloc] init]; 
[model addObserver:sounds]; 

Wenn Sie alle Töne deaktivieren möchten, müssen Sie nur trennen der SFX aus dem Modell; hör auf zu beobachten. Wenn die Sounds vor dem Spielstart deaktiviert werden, müssen Sie die SFX-Klasse nicht zuweisen - das spart Zeit, Leistung und Speicher.

+0

Lesen Sie die Dokumentation zu diesem Thema und es ist wichtiger, die Audio-Priorität festzulegen. Ich kann nicht herausfinden, wie ich es in meiner Anwendung verwenden würde. – Aaron

Verwandte Themen