2010-01-27 118 views
0

我正在爲幾個迷你遊戲製作學齡前兒童的應用程序。其中之一涉及在圖片中找出「什麼是錯的」。例如,如果他們按下在街上玩耍的孩子,便會發出一聲尖叫,孩子被移出街道,並將標籤更新爲「發現1/5錯誤」。如果他們發現所有這些,他們就會轉向一個新的視圖控制器,並出現新的流量錯誤。使用AVAudioPlayer播放聲音時,應用程序不會凍結

一切正常工作......大部分時間。但每過一段時間,應用程序就會播放一些文件,然後凍結。我認爲這與聲音的實際播放(使用AVAudioplayer)有關,因爲如果我對此發表評論,它似乎每次都會發揮作用。

當發現錯誤時調用的函數是這樣的:

-(void)fantKnapp{ 

    NSLog(@"fant en knapp"); 
    int ant =[self.antall intValue]; 
    ant++; 
    NSLog(@"antall %i",ant); 
    self.antall=[NSNumber numberWithInt:ant]; 
    self.poeng.text=[NSString stringWithFormat: @"%i/5 funnet",ant]; 

    if(ant==5){ 
     NSLog(@"Du klarte alle!"); 
     klartAlleView.hidden=NO; 
     spillIgjen.hidden=NO; 
     nestebrettKnapp.hidden=NO; 
     navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [appDelegate spillLyd:@"du_klarte_alle"]; 
    } 
    else{ 
     navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [appDelegate spillLyd:@"cling_1"]; 
    } 
} 

此代碼查找「antall」,發現的錯誤(點)的當前數目。如果發現所有的錯誤都會播放某個聲音(這個聲音總是有效的)。如果沒有另一個聲音播放。這是通過調用appdelegate文件中的函數完成的。

-(void)spillLyd:(NSString*) filnavn{ 
    NSString *audioFilePath=[[NSBundle mainBundle] pathForResource:filnavn ofType:@"aif"]; 
    NSURL *audioFileURL=[NSURL fileURLWithPath:audioFilePath]; 
    self.lydspiller=[[[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil] autorelease]; 
    [self.lydspiller prepareToPlay]; 
    [self.lydspiller play]; 
    NSLog(@"spiller lyden"); 
} 

這在49/50情況下工作得很好,但每隔一段時間它does not。有趣的是聲音播放,但應用程序凍結,標籤不更新(self.poeng.text = ...)。但是所有的NSLog評論都顯示出來了,包括新的點數。我希望這種情況發生之前,聲音播放...

這是AVAudioplayer問題?有沒有人有類似的經歷?任何人都可以幫我解決這個問題嗎?我感謝任何幫助或建議...

(和抱歉挪威。它可能犯規使它變得更容易幫我...)

+0

它說了很多關於我們經常用多少標記符號來說明我們花了一段時間才弄清楚挪威人在哪裏的情況。乍一看,我只是認爲這是我們的典型,「讓我們給這個符號一個神祕的名字」遊戲。 – TechZen 2010-01-27 13:54:16

回答

0

你可能需要實現AVAudioPlayerDelegate方法,使你可以嘗試捕捉玩家的錯誤。如果代表報告即使應用程序凍結,玩家成功完成,那麼錯誤很可能與玩家無關。

我感覺適合你。很少有調試任務比追蹤一個確定但高度間歇性的錯誤更令人沮喪。

相關問題