iPhone ゲームに OpenAL コードを実装しました。ゲームを開始すると、1 秒間実行され、2 秒間停止してから再開されます (しゃっくり効果)。サウンドファイルの読み込みが原因で遅延したと思います。解決策は何ですか?本、サイト、またはソース コードを推奨できる人はいますか (iPhone のリファレンスではありません)。ローディング プロセスはありますか?ローディング プロセスはどこで初期化する必要がありますか? それは役に立ちますか?
以下に、実装した OpenAL コードの関連コンポーネントを示します。サウンド ファイルは、ゲームループ内の「if」ステートメントによって再生および呼び出されます。OpenALController クラスは音源とバッファの作成用であり、InitOpenALメソッドは OpenALController で呼び出されます。MyView は UIView のカスタマイズされたサブクラスであり、メイン ビューに接続されています (デフォルト ビューは使用しませんでした)。
// MyView.m // メイン ビューとしてカスタマイズされた UIView。
#import "OpenALSoundController.h"
- (void)startPlaying{
...
[自己初期化値];
...
[自己初期化タイマー];
}
- (void)initializeTimer { if (theTimer == nil) {
theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector)gameLoop)];
theTimer.frameInterval = 2;
[theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
}
}
- (void)gameLoop { ... If something = true // サウンドを再生 [[OpenALSoundController sharedSoundController] playSound1];
...
}
...
@end
// OpenALSoundController.h @interface OpenALSoundController : NSObject {
...}
...
+ (OpenALSoundController*) sharedSoundController
...
@end
// OpenALSoundController.m
// シングルトン アクセサ
{
static OpenALSoundController* shared_sound_controller;
@synchronized(self)
{
if(nil == shared_sound_controller)
{ shared_sound_controller = [[OpenALSoundController alloc] init];
}
共有_サウンド_コントローラーを返します。
}
共有_サウンド_コントローラーを返します。
}
- (void) initOpenAL{
...
file_url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"fire" ofType:@"wav"]];
firePcmData = MyGetOpenALAudioDataAll((CFURLRef)file_url, &data_size, &al_format,&sample_rate);
alBufferData(fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url 解放];
...
alSourcei(outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}