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