2011-08-28 4 views
6

sau khi tìm kiếm quá nhiều, tôi không thể tìm thấy giải pháp nào để dừng hiệu ứng trong cocos2d.ngừng hiệu lực trong cocos2d?

hiệu lực thi hành của tôi đang chơi một âm thanh được lấy từ cơ sở dữ liệu, vì vậy để ngăn chặn mà âm thanh đặc biệt tôi phải như thế này:

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

NHƯNG tôi đã cảnh báo: stopEffect làm số nguyên từ con trỏ mà không cần diễn viên ..

tại sao lại như vậy? làm thế nào tôi có thể dừng tất cả âm thanh đang phát cùng một lúc ??? hay không phải là người cụ thể? bất kỳ cách nào khác ?

cảm ơn rất nhiều.

+1

ok tôi đã nhận được: ALuint soundEffectID; soundEffectID = [[SimpleAudioEngine sharedEngine] playEffect: play]; [[SimpleAudioEngine sharedEngine] stopEffect: soundEffectID]; – Curnelious

+0

Bạn nên gửi câu trả lời này làm câu trả lời và chấp nhận câu trả lời của bạn để đánh dấu câu hỏi là đã được giải quyết. –

Trả lời

20

ok bạn làm điều này:

ALuint soundEffectID; 

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

Nếu bạn không có soundEffectID, bạn có thể làm gì tiếp theo. Nó đã giúp tôi giải quyết vấn đề của mình.

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

Something more ...

Nếu bạn muốn dừng lại tất cả âm thanh chạy, sau đó

[SimpleAudioEngine end]; 

nhưng điều này sẽ dealloc các sharedEngine quá nên u cần phải gọi "SharedEngine" trong trường hợp muốn phát lại âm thanh :)