一些其他的方式在常规的XNA的Game
类定期调用你Draw
和Update
功能(通常以每秒60帧)。
XNA WinForms示例的工作方式稍有不同。 没有更新/绘制循环。取而代之的是一个Draw
函数。这只有在控件需要重绘时才被调用。这意味着:
你不会有机会经常打电话Keyboard.GetState()
,如果这是你是怎么做的键盘输入。
即使你使用的是事件驱动(非XNA)输入,你的窗口不会定期,所以你可能没有真正看到您输入的,直到XNA控制的结果是最终重绘晚得多重绘。
幸运的是,有一种方法可以强制控件快速重绘。看看those WinForms samples的第二个。你会发现它是动画(换句话说:它经常更新)。它是如何做到的?看看这个代码ModelViewerControl.cs
:
protected override void Initialize()
{
// Start the animation timer.
timer = Stopwatch.StartNew();
// Hook the idle event to constantly redraw our animation.
Application.Idle += delegate { Invalidate(); };
}
它采用了Stopwatch
跟踪多少时间已经过去(因为没有Game
类为你做)。并且它在Application.Idle
事件上无效 - 换句话说,无论什么时候它不忙处理某事,它都会要求重绘。
(当然,这已经为第一的WinForms样品的文件中说明在底部,“动画”下。)
替代奖金答案:没有什么从利用的阻止你来自WinForms的常规XNA游戏中的OpenFileDialog
。只需添加对System.Windows.Forms
的引用,创建对象的实例,在其上设置相应的属性,然后致电ShowDialog()
。
没有看到你在做什么有可能这是一个问题,你需要加倍缓冲winform? – Maynza
您使用哪种输入法? Windows窗体鼠标和键盘事件或XNA输入处理? 我猜是因为你尝试使用WinForms事件。尽管可以使其平滑。您也可以使用XNA的输入处理。 也许你可以提供更多的代码,为你的实际输入处理。 – dowhilefor