2011-08-28 20 views
6

dopo tante ricerche, non sono riuscito a trovare alcuna soluzione per fermare l'effetto in cocos2d.stop effect in cocos2d?

mio effetto sta giocando un suono che state prese dal database, in modo di fermare quel suono particolare devo a questo:

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

ma ho ottenuto avvertimento: stopEffect rendendo intero da puntatore senza getto ..

perché è quello? come posso fermare tutti i suoni che stanno suonando contemporaneamente ??? o non un particolare? ogni altro modo ?

grazie mille.

+1

ok ho capito: ALuint soundEffectID; soundEffectID = [[SimpleAudioEngine sharedEngine] playEffect: play]; [[SimpleAudioEngine sharedEngine] stopEffect: soundEffectID]; – Curnelious

+0

È necessario inviare questa risposta come risposta e accettare la risposta per contrassegnare la domanda come risolta. –

risposta

20

ok si esegue questa operazione:

ALuint soundEffectID; 

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

Se non si dispone di soundEffectID, si può fare dopo. Mi ha aiutato a risolvere il mio problema.

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

Qualcosa di più ...

Se si vuole fermare tutti i suoni in esecuzione, quindi

[SimpleAudioEngine end]; 

ma questo sarà il dealloc sharedEngine troppo quindi u bisogno di chiamare "SharedEngine" nel caso in cui vuoi riprodurre di nuovo il suono :)