Застрял на белом экране при запуске игры XNA - PullRequest
1 голос
/ 22 июня 2011

При запуске игры XNA белый экран очень быстро мигает.На медленных машинах это более заметно, чем на быстрых.Мы разрабатываем игровой костюм с системой меню, разработанной в WPF.Это меню запускает наши игры 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);
    }

Спасибо, Ваутер

1 Ответ

0 голосов
/ 25 июня 2011

Ну, во-первых, флэш-память, вероятно, связана с инициализацией устройства DirectX, которая происходит, когда окно XNA восстанавливается после минимизации или когда устройство изначально создается; Есть события, которые могут захватить эти события. Я не знаю, что вы делаете, когда нажимаете левую клавишу, но я хотел бы убедиться, что вы не вызываете инициализацию другого устройства.

Ключевыми событиями являются события GraphicsDeviceManager , особенно события сброса. Убедитесь, что при сбросе устройства вход не обрабатывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...