SimpleAudioEngine требует времени для воспроизведения звука

Я использую SimpleAudioEngine для воспроизведения звуков в моем приложении cocos2D. У меня есть ситуация, когда я продолжаю стрелять пулями, нажимая на кнопку и проигрывая звук, когда пуля стреляет. Когда я постоянно нажимаю на кнопку "стрелять", игровая сцена дергается. Это начало происходить, когда я интегрировал звуки.

Это код, который я использую при нажатии кнопки:

-(void)rocketButtonTapped:(id)sender
{
  [[SimpleAudioEngine sharedEngine] playEffect:@"rocket_fired.wav"];
  NSLog(@"Pencil Rocket");
  if(int_pencilRocketTagCount>=220)
  {
    int_pencilRocketTagCount=215;
  }
  [self performSelector:@selector(shootPencilRocket)];  
}

Пожалуйста, предложите мне выход... Спасибо заранее..

1 ответ

Решение

Перед началом игры сделайте это:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"rocket_fired.wav"];

Это загружает эффект в память. Если это не решит проблему, то проблема может быть в другом месте. Например, слишком много звуковых эффектов, воспроизводимых одновременно, если звук ракетного огня длится несколько секунд, это может быть проблемой. Также непрерывная запись в Debug Console через NSLog или CCLOG медленная и может легко привести к падению частоты кадров.

Это также может помочь снизить качество звука. Частоты дискретизации 22 или даже 11 кГц достаточно для (коротких) звуковых эффектов, 44 кГц расточительны, поскольку увеличивают использование памяти в 2 или 4 раза соответственно. Если файл эффекта использует стереоканалы, преобразуйте его в моно, чтобы уменьшить размер пополам. Чем меньше памяти использует эффект, тем меньше он напрягает аппаратное обеспечение, играющее его.

Другие вопросы по тегам