2012-07-12 83 views
0

我正在使用SimpleAudioEngine在我的cocos2D应用程序中播放声音。我有一种情况,就是每次弹一颗子弹时都会按住按钮继续发射子弹,并发出声音。 当我连续点击拍摄按钮有时,游戏场景抽搐。这发生在我整合了声音的时候。SimpleAudioEngine需要时间播放声音

这是我使用的按钮点击代码:

-(void)rocketButtonTapped:(id)sender 
{ 
    [[SimpleAudioEngine sharedEngine] playEffect:@"rocket_fired.wav"]; 
    NSLog(@"Pencil Rocket"); 
    if(int_pencilRocketTagCount>=220) 
    { 
    int_pencilRocketTagCount=215; 
    } 
    [self performSelector:@selector(shootPencilRocket)]; 
} 

请建议我一条生路......在此先感谢..

回答

2

在比赛开始前,这样做:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"rocket_fired.wav"]; 

这会将该效果加载到内存中。 如果这不能解决问题,那么问题可能在其他地方。例如,如果火箭发射声音持续几秒钟,同时播放太多声音效果,这可能是一个问题。通过NSLog或CCLOG连续记录到调试控制台也很慢,并且很容易导致帧率下降。

这也可能有助于降低音质。 22kHz甚至11kHz的采样率足够用于(短)音效,44kHz会浪费,因为它会分别增加2或4倍的内存使用量。如果效果文件使用立体声声道,请将其转换为单声道以将尺寸减半。效果使用的内存越少,硬件播放的压力就越小。

+0

这是真的,无论你使用什么声音库:从'磁盘'(在这种情况下,闪存,但不是RAM)读取文件需要很多周期。在' - (BOOL)应用程序中预加载您的效果:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions',如果您从一开始就需要它们(例如按钮敲击声),或者在游戏的“加载”只在游戏中需要。 – 2012-07-12 10:02:10

+0

谢谢。在我的情况NSLog是一个问题。我遇到的另一个问题是,我可以播放“A”wav声音,但是如果我用“B”wav声音替换“A”wav声音,它不会播放。艾米的原因是什么? – NiKKi 2012-07-12 14:06:11

+0

B wav是否使用与其他文件完全相同的格式(采样率,比特率等)?有时.wav下载使用较旧的格式或嵌入了iOS无法处理的元数据。有时候,用Audacity这样的音频程序打开wav会有帮助,并再次保存以使其工作。与大多数音频节目相比,iOS对WAV格式的选择很简单。 – LearnCocos2D 2012-07-12 20:06:38