Я внедрил код OpenAL в свою игру для iphone. Когда я запускаю игру, она длится 1 секунду и останавливается на 2 секунды, а затем возобновляется (эффект икоты). Я считаю, что это задерживается из-за загрузки звуковых файлов. Каково решение? Может ли кто-нибудь порекомендовать какую-либо книгу, сайт или исходный код (пожалуйста, не ссылку на iphone)? Есть ли процесс загрузки и где мне его инициализировать? Это поможет?
Ниже я включил соответствующие компоненты реализованного мной кода OpenAL. Звуковой файл будет воспроизведен и вызван оператором if в цикле игры. Класс OpenALController предназначен для создания источников звука и буферов, а метод InitOpenAL вызывается в OpenALController. MyView - это настраиваемый подкласс UIView, подключенный к основному представлению (я не использовал представление по умолчанию).
// MyView.m // Настроенный UIView в качестве основного представления.
#import "OpenALSoundController.h"
- (void) startPlaying {
...
[self initializeValuables];
...
[self initializeTimer];
}
- (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];
}
return shared_sound_controller;
}
return shared_sound_controller;
}
- (void) initOpenAL {
... < br> file_url = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource: @ "fire" ofType: @ "wav"]];
firePcmData = MyGetOpenALAudioDataAll ((CFURLRef) file_url, sample & al_form_size)
alBufferData (fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url release];
...
alSourcei (outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}