2011-08-28 10 views
6

po tak wielu poszukiwaniach, nie mogłem znaleźć żadnego rozwiązania, aby zatrzymać efekt w cocos2d.zatrzymać efekt w cocos2d?

mój wpływ jest odtwarzany dźwięk, który został zaczerpnięty z bazy danych, tak, aby zatrzymać ten konkretny dźwięk muszę do tego:

[[SimpleAudioEngine sharedEngine] stopEffect:[NSString stringWithFormat:@"%@.wav",sound]]; 

ale mam ostrzeżenie: stopEffect podejmowania całkowitą od wskaźnika bez obsady ..

dlaczego tak jest? Jak mogę zatrzymać wszystkie dźwięki odtwarzane jednocześnie? czy nie konkretny? w inny sposób?

wielkie dzięki.

+1

ok, mam to: ALuint soundEffectID; soundEffectID = [[SimpleAudioEngine sharedEngine] playEffect: play]; [[SimpleAudioEngine sharedEngine] stopEffect: soundEffectID]; – Curnelious

+0

Powinieneś przesłać to jako odpowiedź i zaakceptować odpowiedź, aby oznaczyć pytanie jako rozwiązane. –

Odpowiedz

20

ok to zrobić:

ALuint soundEffectID; 

//to start 
soundEffectID=[[SimpleAudioEngine sharedEngine] playEffect:@"my sound"]; 
//to stop 
[[SimpleAudioEngine sharedEngine] stopEffect:soundEffectID]; 
8

Jeśli nie masz soundEffectID można robić dalej. Pomógł mi rozwiązać mój problem.

static NSMutableArray *soundsIdArr; 

@implementation MusicAndSound 

//It must be run before using sound 
+(void)initSound 
{ 
    NSLog(@"initSound"); 

    soundsIdArr = [NSMutableArray arrayWithCapacity:0]; 
    [soundsIdArr retain]; 
} 

+(void)playSound:(NSString *)fileName 
{ 
    [[SimpleAudioEngine sharedEngine] setEffectsVolume:1.0]; 

    soundEffectID = [[SimpleAudioEngine sharedEngine] playEffect:[[NSBundle mainBundle] pathForResource:fileName ofType:nil]]; 

    [soundsIdArr addObject:[NSString stringWithFormat:@"%i", soundEffectID]]; 
} 

+(void)stopAllSounds 
{ 
    [[SimpleAudioEngine sharedEngine] setEffectsVolume:0.0]; 

    for (int i=0; i<[soundsIdArr count]; i++) 
    { 
     [[SimpleAudioEngine sharedEngine] stopEffect:[[soundsIdArr objectAtIndex:i] intValue]]; 
    } 

    [soundsIdArr removeAllObjects]; 
} 

- (void)dealloc 
{ 
    [soundsIdArr release]; 

    [super dealloc]; 
} 

@end 
0

Coś więcej ...

Jeśli chcesz zatrzymać wszystkie uruchomione dźwięki, następnie

[SimpleAudioEngine end]; 

ale to dealloc się sharedEngine zbyt więc u trzeba zadzwonić "SharedEngine" w przypadku Wanna odtworzyć dźwięk ponownie :)