2011-06-22 16 views
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); 
    } 

おかげで、 はWouter

答えて

0

すべてのフラッシュのまあ最初は原因XNAウィンドウが最小化から復元されたときや、デバイスが最初に作成されたときに起こるDirectXのデバイスの初期化におそらくあります。これらのイベントをキャプチャできるイベントがあります。左のキーを押したときに何をやっているのか分かりませんが、別のデバイスの初期化を行わないようにチェックします。

重要イベントは、GraphicsDeviceManagerに含まれるイベントです。特にリセットイベントです。デバイスがリセットされているときは、入力が処理されていないことを確認してください。

関連する問題