2014-02-12 49 views
0

我建立一個應用程序,教孩子們如何說拼字遊戲拼圖形式的字母表中的字母組成的圖像製成的字母。每次點擊一次就會產生咔嗒聲,當它們完成時,它會播放出完美的聲音,然後再按下該字母的聲音,當他們點擊該字母時,它也會播放該字母的聲音。理論上很簡單,但對於像我這樣的新手來說很複雜從數組中播放Wav文件

我有40個聲音我想加載到一個數組中,然後能夠在用戶單擊某個字母或對象時的任何給定時間單獨調用每個聲音。

我已經成功設法使用我在網上找到的一個基本例子加載單個聲音,但是我的需求比單個聲音大得多,我覺得數組會更好地適合,除非您可以建議更好的方法?

下面的代碼檢測用戶是否將拼圖放在正確的位置,然後播放聲音以顯示其位置。我告訴你這個只是解釋我迄今爲止所做的事情,我意識到這將需要重新與數組。

請任何人都可以告訴我如何創建一個聲音數組,然後選擇一個特定的聲音播放一個給定的點。

非常感謝

{ 
UITouch *touch = [[event allTouches]anyObject]; 
CGPoint touchLocation = [touch 
         locationInView:self.view]; 

if ([touch view] == image1) 
{ 

    CGRect rect1= CGRectMake(562, 260, 103, 302); 
    if(CGRectContainsPoint(rect1,touchLocation)) 
    { 
     CGRect myFrame = image1.frame; 
     myFrame.origin.x = 562; 
     myFrame.origin.y = 260; 
     image1.frame = myFrame; 
     imagea =true; 
     [image1 setUserInteractionEnabled:NO]; 


     NSURL* audioFileURL1 = [[NSBundle mainBundle] URLForResource:@"mouse1" withExtension:@"wav"]; 
     sound1 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL1 error:nil]; 
     [sound1 play]; 



     if(imagea && imageb && imagec) { 



      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"WELL DONE!!" 
                  message:@"You have learnt the letter A" 
                  delegate:nil 
                cancelButtonTitle:@"Continue" 
                otherButtonTitles: nil]; 
      [alert show]; 



      NSLog(@"All images set and locked in place");} 


     } 
    } 

回答

0

請勿事先加載聲音。創建一個NSArray的聲音文件名,並在您的視圖控制器的viewDidLoad方法填充:

- (void) viewDidLoad 
{ 
    soundNames = @[@"sound1", @"sound2", @"sound3", @"sound4", @"sound5"]; 
} 

然後創建一個方法playSoundAtIndex:採用一個數字指標,用它來加載聲音,並播放:

- (void) playSoundAtIndex: (NSUInteger) index; 
{ 
    if (index> soundNames.count-1) 
    return; 
    NSURL* audioFileURL = [[NSBundle mainBundle] URLForResource: soundNames[index] 
    withExtension:@"wav"]; 
    AVAudioPlayer *soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: audioFileURL 
    error:nil]; 
    [soundPlayer play]; 
} 

就是這樣。

如果您發現需要在多個視圖控制器中播放這些聲音,則可能需要創建一個聲音管理器單例,您可以從應用程序的任何位置調用該聲音。對Objective C中的單例設計模式進行Google搜索。甚至還有一些關於SO的例子。

0

你最好不要想着面向對象的。這聽起來像你想要一個包含圖像的類,以及在圖像被觸摸時播放的聲音。您可以爲此設置UIImageView的子類,添加UITapGestureRecognizer,並在檢測到輕擊時播放聲音。如果你有40個圖像和40個相應的聲音,你可以在plist中定義它們(作爲一個字典數組)。加載plist,迭代數組,併爲每個字典使用它來設置你的子類的圖像和聲音。

+0

這聽起來合乎邏輯,但是我會給出40個聲音,並且只有26個聲音會與某個字母或圖像相關。其他人將是應用程序的聲音效果。我可能會爲這些字母和字母創建一個plist。然而,將它們分開是更好的辦法嗎? – user3246508

+0

你可以有兩個plists,一個用於字母,一個用於其他聲音。取決於你想如何真正使用它們。很難說如果不知道你的應用程序應該如何工作。 – jsd

+0

對不起,我應該給予更多的細節。基本上它是一個應用程序,它教孩子們如何用拼圖形式拼寫字母表中的字母,拼成由圖像組成的字母。每次點擊一次就會產生咔嗒聲,當它們完成時,它會播放出完美的聲音,然後再按下該字母的聲音,當他們點擊該字母時,它也會播放該字母的聲音。理論上很簡單,但對於像我這樣的新手來說很複雜 – user3246508