Регулировка громкости 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
протокол