C # XNA: остановка и воспроизведение объектов Cue (звука) - PullRequest
4 голосов
/ 04 февраля 2010

Я пытаюсь остановить Cue, затем воспроизвести его снова. Этот код находится в цикле Update ():

Cue torpedoSound = soundBank.GetCue("torpedo");
torpedoSound.Stop(AudioStopOptions.AsAuthored);
torpedoSound.Play(); // Invalid Operation Exception

Однако я всегда получаю InvalidOperationException в указанном выше месте. В документации говорится, что это произойдет, если Play() вызывается для Cue, для которого isPlaying является истинным Но если я позвоню Stop() непосредственно перед тем, как это может быть?

Это отлично работает:

soundBank.PlayCue("torpedo");

Сразу после этого вызов Stop() позволяет воспроизводить звук в любом случае, что меня удивляет:

soundBank.PlayCue("torpedo");
torpedoSound.Stop(AudioStopOptions.Immediate);

Разве это не делает его никогда не слышимым для пользователя?

Кроме того, когда звук уже воспроизводится, вызов Stop() не может его остановить.

Я новичок в C # / XNA.

1 Ответ

2 голосов
/ 05 февраля 2010

Как только Cue остановлен, он больше не может быть использован. Вы должны получить новый экземпляр Cue из аудио движка.

Обратитесь к этому образцу: http://msdn.microsoft.com/en-us/library/dd940205.aspx

Что касается остановки, Cue не сразу останавливается, когда вы вызываете Stop. Это может занять один или два кадра или даже больше, если определен конечный переход.

...