我正在制作一个简单的游戏,每次触摸屏幕后,都会在小型UIImageView上发生动画,这种情况非常顺利,应用程序运行顺畅,CADisplayLink作为计时器。
我添加了一个mp3文件,每次触摸后播放1秒钟,因为AVAudioPlayer想象的声音如下:Bip
因此,当我第一次触摸屏幕时,第一次打嗝发生应用程序冻结不到一秒,我可以说它是好的,因为它是第一次声音分配内存。
如果我再次触摸屏幕,如果我在3秒前触摸屏幕,应用程序不会打嗝,但是如果我等待4秒钟以后,应用程序会在每次触摸后开始打嗝。
每次如果我在触摸之间反复触摸时间超过3秒,应用程序就不会打嗝,但在触摸之间4秒后,应用程序会打嗝。
有什么想法来解决打嗝?
如果需要,这是一些代码
@property (nonatomic, strong) AVAudioPlayer *mySound;
- (void)viewDidLoad {
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"bip" ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
self.mySound = newPlayer;
[mySound prepareToPlay];
[mySound setDelegate:self];
}
触摸后发生
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
if (location.x < viewWidth/2) {
[mySound play];
} else {
[mySound play];
}
}
答案 0 :(得分:0)
发出非常短暂的无声声音。每隔一秒钟使用你的计时器(与另一个声音播放器)一起播放。 - 你看到这里的想法是什么;我们试图让媒体服务器保持活动状态,以便在我们想要声音效果时准备就绪。既然你说在3秒之前没有问题,这让我觉得3秒后媒体服务器又回到了睡眠状态。我们的目标是保持&#34;发痒&#34;它不会发生。
但是,总的来说,我的印象是AVAudioPlayer不适用于此类事情。您可能应该使用AVAudioEngine,它可以保持运行并且可以无延迟地播放声音。