Регулировка громкости SKAudioNode задерживается

Я занимаюсь разработкой игры, в которой SKAudioNode играет в игру музыку. Когда игрок начинает новую игру, я хочу, чтобы музыка постепенно исчезала, поэтому я написал следующий код:

SKAudioNode *SFXNode = [[SKAudioNode alloc] initWithfile:@"GameMusic.mp3"];
[SFXNode runAction:[SKAction changeVolumeTo:0 duration:0]];
SFXNode.positional = NO;
[self addChild:SFXNode];
[SFXNode runAction:[SKAction changeVolumeTo:1 duration:1]];

Однако, когда начинается сцена, музыка воспроизводится на полной громкости в течение доли секунды, затем она заглушается и возвращается обратно, как и должно быть. У кого-нибудь есть идеи, почему это происходит? (Музыка становится полной громкостью только после того, как пользователь запустил модальный переход к сцене, но до того, как она была отображена на экране. Как только сцена отображается, музыка постепенно исчезает). Кроме того, музыка кажется позиционной: когда игрок перемещается по сцене, громкость меняется, чего я не хочу. Решения любой из этих проблем высоко ценятся. Спасибо!

1 ответ

Решение

Это связано с тем, что изменение громкости происходит после отправки звука в аудиобуфер. Вам нужно сделать сброс громкости, прежде чем произойдет обновление. Теперь вы не можете сделать это, как только вы создаете аудио, вам нужно сделать это после того, как оно будет добавлено в AudioEngine, поэтому я бы рекомендовал делать это, когда ваша сцена переходит в представление (в didMoveToView функция).

Код для фактического изменения громкости должен быть примерно таким

((AVAudioMixerNode *)SFXNode.avAudioNode).volume = 0 но я бы порекомендовал проверить, если avAudioNode существует в первую очередь и что он соответствует AVAudioMixerNode протокол

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