2011-08-28 13 views
6

después de tanta búsqueda, no pude encontrar ninguna solución para detener el efecto en cocos2d.efecto de parada en cocos2d?

mi efecto se reproduce un sonido que ha tomado de la base de datos, por lo que parar ese sonido particular, tengo que a esto:

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

pero me dio la advertencia: stopEffect haciendo entero desde un puntero sin el molde ..

¿por qué es eso? ¿cómo puedo detener todos los sonidos que se están reproduciendo a la vez ??? o no uno en particular? Cualquier otra manera ?

muchas gracias.

+1

bien lo tengo: ALuint soundEffectID; soundEffectID = [[SimpleAudioEngine sharedEngine] playEffect: play]; [[SimpleAudioEngine sharedEngine] stopEffect: soundEffectID]; – Curnelious

+0

Debe enviar esto como respuesta y aceptar su respuesta para marcar la pregunta como resuelta. –

Respuesta

20

bien hacer esto:

ALuint soundEffectID; 

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

Si no tiene soundEffectID, se puede hacer a continuación. Me ayudó a resolver mi 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

Algo más ...

Si quieres detener todos los sonidos que se ejecutan, entonces

[SimpleAudioEngine end]; 

pero esto dealloc la sharedEngine también, así que u necesidad de llamar "SharedEngine" en caso de que quiera Reproducir sonido de nuevo :)