一些其他的方式在常規的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