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);
}
おかげで、 はWouter