XNA MediaPlayer загрузка музыки по времени

Я загружаю музыку с помощью следующего кода в функцию загрузки содержимого:

song = Content.Load<Song>("music/game");
MediaPlayer.IsRepeating = false;
MediaPlayer.Play(song);

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

Я предполагаю, что это как-то связано со временем загрузки? любой совет?


person Wowbagger    schedule 26.11.2012    source источник


Ответы (1)


Единственное, что вы можете сделать, это переместить Content.Load<Song> в метод Load и проверить, воспроизводится ли он в обновлении, а если нет, воспроизвести. Например,

public void LoadContent(ConentManager content)
{
    song = content.Load<Song>("music/game");
    gameSongStartedPlaying = false; // this variable to hold if you have starting playing this song already
    MediaPlayer.IsRepeating = false;
}

public void Update(GameTime gameTime)
{
    if(MediaPlayer.State == MediaState.Stopped && !gameSongStartedPlaying)
    {
        MediaPlayer.Play(song);
        gameSongStartedPlaying = true;
    }
}

Это должно начать воспроизведение песни на первом проходе метода обновления, а не на этапе загрузки, когда песня «играет», пока все ресурсы после Content.Load<Song> все еще загружаются (это может быть причиной преждевременного завершения вашей песни).

person Darren Reid    schedule 26.11.2012
comment
Часть моих проблем заключается в том, что мой таймер работает неправильно, я могу попробовать использовать секундомер xna вместо этого. Но использование приведенного выше кода привело к загрузке части проблемы :), поскольку ошибка синхронизации теперь кажется немного более постоянной. - person Wowbagger; 27.11.2012