2014-02-12 131 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