私は私のゲーム用に小さなミュージックエンジンをC#とXNAでプログラミングしています。その1つの側面は、曲からセクションをループする可能性です。たとえば、私の曲にはイントロパートがあり、曲が最後(または他の特定のポイント)に達すると、イントロパートが終わったところにジャンプして戻ります。(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はデルタ時間、最後のフレームからの経過時間)
しかし、私はそうは思いません、それはそのための良い解決策です。
私の問題(そして私の英語、そう/ o /)を理解して私を助けてくれることを願っています:)