0

我有一个物体在屏幕上移动,一旦它到达边缘它就会改变方向并播放声音这一切都很好,除了当它播放声音时我冻结了大约半秒钟有什么方法可以让它顺利运行声音和物体的运动?

-(void)viewDidLoader
{
NSString *path1 = [[NSBundle mainBundle] pathForResource:@"ballbounce" ofType:@"mp3"];
ballbounce = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path1] error: NULL];
[ballbounce prepareToPlay];
}

-(void) ballcollition 
{
[self ballplaysound]
enemy.center = CGPointMake(enemy.center.x+pos.x,enemy.center.y+pos.y);

    if (enemy.center.x > 328 || enemy.center.x < 0)

    {
        pos.x = -pos.x;



    }
}
-(void)ballplaysound
{
if (enemy.center.x > 328 || enemy.center.x < 0 ||enemy.center.y < 0||enemy.center.y < 300)
[ballbounce play];
}
4

4 回答 4

1

使用系统声音以获得流畅播放的声音。

原始非弧答案:

#import <AudioToolbox/AudioToolbox.h>

- (IBAction)soundButton:(id)sender {

NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"alert" ofType:@"wav"];

SystemSoundID soundID;

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);

AudioServicesPlaySystemSound (soundID);

[soundPath release];

}

针对 ARC 进行了更新,并变成了一个实用函数:

- (void)soundPlay:(NSString*)waveName {
    // wavName = @"alert" without any file extension (not alert.wav)

    NSString *soundPath = [[NSBundle mainBundle] pathForResource:waveName ofType: @"wav"];

    SystemSoundID soundID;

    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);

    AudioServicesPlaySystemSound (soundID);


}
于 2012-09-17T12:33:22.330 回答
0

使用 AudioServicesPlaySystemSound():https ://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/SystemSoundServicesReference/Reference/reference.html

于 2012-09-17T12:18:35.433 回答
0

AVPlayer您可以通过简单地将您mp3caf格式转换为此处解释的格式来获得声音“平滑度” 。

于 2012-09-17T12:20:56.063 回答
0

1)创建 AVAudioPLayer 并将其缓存在您的应用程序初始化代码中,不再调用它也调用准备。

2)所以你包含的方法应该只需要调用 play;

3)如果您仍然可以跳过使用

[ballbounce performSelectorOnMainThread:@selector(play) withObject:nil];  

由于您没有包含所有代码并且您显然在进行绘图 - 将播放方法放在队列中可以让绘图代码完成而不会中断。

正确执行此操作可能会解决您的问题。使用 AudioSystemSound 的开销要低得多,但您应该遵循相同的原则,即在应用初始化中准备任何常用声音,而不是在需要它们的确切时间生成它们以避免性能问题。

于 2012-09-17T14:41:40.243 回答