1
當啓動XNA遊戲時,白色屏幕會非常快速地閃爍。在較慢的機器上,這比在快速機器上更明顯。我們使用WPF開發的菜單系統開發遊戲服裝。這個菜單啓動我們的XNA遊戲,並將其窗口設置爲前景窗口(僅當它自身具有焦點時才起作用)在XNA遊戲啓動的白色屏幕上卡住
我們遇到的問題是,如果玩家在開始遊戲後繼續按下左按鈕,系統會卡住這個白色的屏幕閃爍。屏幕保持白色,播放器無法使用鼠標退出該屏幕(alt-tab可行,但不受歡迎)。
我該如何防止這種情況發生?我確實希望將XNA遊戲設置爲前景窗口,因爲根據玩家點擊菜單系統的位置可以保持活動狀態。
這是啓動XNA遊戲的菜單系統的代碼形式。
var process = Process.Start(info);
var currentProcess = Process.GetCurrentProcess();
while (!process.HasExited)
{
Thread.Sleep(50);
if (GetForegroundWindow() == currentProcess.MainWindowHandle)
{
Activate(process.MainWindowHandle);
}
}
這是將XNA遊戲設置爲前景窗口的代碼。
/// <summary>
/// Sets the window to be foreground
/// </summary>
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
/// <summary>
/// Activate or minimize a window
/// </summary>
[DllImportAttribute("User32.DLL")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_SHOW = 5;
private const int SW_MINIMIZE = 6;
private const int SW_RESTORE = 9;
/// <summary>
/// The GetForegroundWindow function returns a handle to the foreground window.
/// </summary>
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
private static void Activate(IntPtr windowHandle)
{
ShowWindow(windowHandle, SW_RESTORE);
SetForegroundWindow(windowHandle);
}
感謝, 沃特