Tôi đang lập trình một Music Engine nhỏ cho trò chơi của mình bằng C # và XNA, và một khía cạnh từ đó là khả năng lặp một phần từ một bài hát. Ví dụ: bài hát của tôi có một đoạn intropart và khi bài hát đến cuối (hoặc bất kỳ điểm cụ thể nào khác), nó sẽ nhảy trở lại nơi đoạn intropart vừa kết thúc. (A - B - B - B ...)
Bây giờ tôi đang sử dụng WatersKlank, hoạt động hoàn hảo, không có bất kỳ khoảng trống nào, nhưng tôi gặp một vấn đề:
Điểm để nhảy trở lại là một chút không chính xác. Dưới đây là một số mã ví dụ:
public bool Passed(float time)
{
if ( PlayPosition >= time )
return true;
return false;
}
//somewhere else
if( song.Passed( 10.0f ) )
song.JumpTo( 5.0f );
Bây giờ vấn đề là, bài hát vượt qua 10 giây, nhưng phát vài mili giây cho đến 10.1f hoặc lâu hơn, và sau đó nhảy lên 5 giây. Nó không ấn tượng lắm, nhưng rất không đúng với nhu cầu của tôi. Tôi đã cố gắng sửa nó như thế:
public bool Passed( float time )
{
if( PlayPosition + 3 * dt >= time && PlayPosition <= time )
return true;
return false;
}
(dt là thời gian delta, thời gian trôi qua kể từ khung cuối cùng)
Nhưng tôi không nghĩ rằng, đó là một giải pháp tốt cho điều đó.
Tôi hy vọng, bạn có thể hiểu vấn đề của tôi (và tiếng Anh của tôi, yay / o /) và giúp tôi :)