Я программирую небольшой Music Engine для своей игры на C # и XNA, и одним из аспектов этого является возможность зацикливания фрагмента песни. Например, моя песня имеет вступление, и когда песня достигла конца (или любой другой конкретной точки), она возвращается туда, где вступление только что закончилось. (A - B - B - B ...)
Сейчас я использую IrrKlank, который работает отлично, без пробелов, но у меня проблема:
Точка, где нужно прыгать назад, немного неточна. Вот пример кода:
public bool Passed(float time)
{
if ( PlayPosition >= time )
return true;
return false;
}
//somewhere else
if( song.Passed( 10.0f ) )
song.JumpTo( 5.0f );
Теперь проблема в том, что песня проходит 10 секунд, но проигрывает несколько миллисекунд до 10.1f или около того, а затем переходит на 5 секунд. Это не так драматично, но очень неправильно для моих нужд. Я попытался исправить это так:
public bool Passed( float time )
{
if( PlayPosition + 3 * dt >= time && PlayPosition <= time )
return true;
return false;
}
(dt - время дельты, время, прошедшее с последнего кадра)
Но я не думаю, что это хорошее решение для этого.
Я надеюсь, что вы можете понять мою проблему (и мой английский, yay / o /) и помочь мне :)