2012-07-12 106 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