2012-02-27 24 views
0

XNAでTextBoxコントロールを作成していて、GameTimeクラスへのアクセス権がありません。現在、私は点滅するテキストカーソルのキャレットをシミュレートしようとしていますと、正常にこのコードを使用して行っていますタイミングの選択肢は何ですか?

int deltaTickCount = Environment.TickCount - previousTickCount; 

if (deltaTickCount < CursorBlinkRate && Selected) 
{ 
    spriteBatch.Draw(emptyPixel, new Rectangle(caretLocation, Rectangle.Y + 1, caretWidth, caretHeight), Color.Black); 
} 
else if (deltaTickCount > CursorBlinkRate * 2) 
{ 
    previousTickCount = Environment.TickCount; 
} 

はしかし、私はEnvironment.TickCountを使用して少し警戒しています。コンピュータが十分な長さで動作していた場合、ティックカウントが整数サイズを超えたときに、プログラムが最終的にクラッシュしたり、予期しない動作が発生したりすることはありませんか?

Windowsは何をしていますか?私はそれがシステムクロックを使用すると思います。それはより適切な解決策でしょうか?私はティックカウントの代わりに2ミリ秒のようなものを使用したと想像していますが、わかりません。

読んでいただきありがとうございます。単純に変更、整数オーバーフローの場合に何が起こるかで悩まずに

答えて

2

多くの場合、システム診断タイマーを使用します。

これは非常に強力なツールで、多くの優れたコントロールを備えたタイマーを作成します。

using System.Diagnostics; 

Stopwatch timer = new Stopwatch(); 

そして、作り付けのコントロールを使用します。

timer.Start(); 
if(timer.elapsedMilliseconds() > ...) 
{ } 
timer.Reset(); 

等...

これは、タイマーをリセットすることが可能でしょうか?

0

:Evnironment.TickCountがロールオーバーしたとき

int deltaTickCount = 
    Environment.TickCount > previousTickCount 
     ? Environment.TickCount - previousTickCount 
     : CursorBlinkRate * 3; 
1

は、deltaTickCountはマイナスになってしまうだろう、あなたはそれが起こっている知っています。計算は次のようになります。

if (deltaTickCount < 0) 
    deltaTickCount = int.MaxValue - previousTickCount + Environment.TickCount; 
関連する問題