在XNA游戏启动时卡在白色屏幕上
本文关键字:白色 屏幕 XNA 游戏 启动 | 更新日期: 2023-09-27 17:59:49
启动XNA游戏时,白色屏幕会快速闪烁。在速度较慢的机器上,这比在速度较快的机器上更明显。我们用WPF开发的菜单系统开发了一套游戏服。此菜单启动我们的XNA游戏,并将其窗口设置为前景窗口(仅当其自身具有焦点时有效)
我们面临的问题是,如果玩家在开始游戏后一直按左键,系统就会卡在这个白色屏幕上。屏幕保持白色,玩家无法用鼠标退出此屏幕(alt选项卡有效,但不受欢迎)。
我该如何防止这种情况发生?我确实想把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
首先,闪存可能是由于DirectX设备初始化引起的,当XNA窗口从最小化状态恢复或设备最初创建时;有些事件可以捕获这些事件。我不知道按下左键时你在做什么,但我会检查一下,以确保你没有导致另一个设备初始化发生。
关键事件是GraphicsDeviceManager中包含的事件,尤其是重置事件。确保在设备复位时,不会处理任何输入。