0

画面上を移動するオブジェクトがあり、オブジェクトが端に達すると方向が変わり、サウンドが再生されます。ただし、サウンドを再生すると約0.5秒間フリーズしますが、これをスムーズに実行する方法はあります。音と物体の動き?

-(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

スムーズに再生されるサウンドには、システムサウンドを使用してください。

元の非ARC回答:

#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を作成し、アプリの初期化コードにキャッシュします。二度と呼び出さないでください。また、prepareも呼び出してください。

2)したがって、含めたメソッドはplayを呼び出すだけで済みます。

3)それでもスキップを使用する場合

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

すべてのコードを含めておらず、明らかに描画を行っているため、playメソッドをキューに入れると、描画コードを中断することなく終了できます。

これを正しく行うと、修正される可能性があります。AudioSystemSoundを使用すると、オーバーヘッドがはるかに低くなりますが、パフォーマンスの問題を回避するために、アプリの初期化で頻繁に使用されるサウンドを準備し、必要なときにそれらを生成しないという同じ原則に従う必要があります。

于 2012-09-17T14:41:40.243 に答える