我有什么时间选择

本文关键字:选择 时间 什么 | 更新日期: 2023-09-27 18:25:54

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

感谢阅读。

我有什么时间选择

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

这是一个非常强大的工具,它为你创建了一个计时器,有很多很好的控制。

using System.Diagnostics;
Stopwatch timer = new Stopwatch();

然后使用内置控件:

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

等等。。。

这将允许您重置计时器?

当Evnironment.TickCount滚动时,deltaTickCount将为负数,所以您知道它已经发生了。计算结果变为:

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

不必担心整数溢出时会发生什么,只需更改为:

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