我的时机选择是什么?

时间:2012-02-27 17:44:42

标签: c# time timer xna

我正在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的功能?我想它会使用系统时钟。这会是一个更合适的解决方案吗?我想他们使用了总秒数而不是滴答计数,但我不确定。

感谢阅读。

3 个答案:

答案 0 :(得分:2)

我通常在很多情况下使用系统诊断计时器。

这是一个非常强大的工具,可以为您创建一个具有很多良好控制的计时器。

using System.Diagnostics;

Stopwatch timer = new Stopwatch();

然后使用内置控件:

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

等...

这可以让你重置计时器吗?

答案 1 :(得分:1)

当Environment.TickCount翻转时,deltaTickCount将最终为负数,因此您知道它已经发生。然后计算变为:

if (deltaTickCount < 0)
   deltaTickCount = int.MaxValue - previousTickCount + Environment.TickCount;

答案 2 :(得分:0)

如果不解决整数溢出的情况,只需更改为:

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