我正在 XNA 中创建一个在 PC 上运行的游戏。
在启动屏幕上,用户有三个选项。如果他们按“Enter”,游戏就会开始,如果他们按“M”,他们将进入“帮助”菜单,如果他们按“W”,我希望他们可以访问我的网站。
我正在使用 Process.Start 打开浏览器访问我的网站。
问题是,当我按“W”时,有时它会打开 1 个带有该网站的浏览器。然而,大多数时候它会同时打开 3 - 7 个浏览器。
为什么会同时打开多个浏览器?
如何使其在按下“W”时仅打开 1 个浏览器?
这是我的代码。我还没有建立我的网站,所以我使用 yahoo.com 作为目的地:
private void UpdateSplashScreen()
{
KeyboardState keyState = Keyboard.GetState();
if (gameState == GameState.StartScreen)
{
if (keyState.IsKeyDown(Keys.Enter))
{
gameState = GameState.Level1;
explosionTime = 0.0f;
}
if (keyState.IsKeyDown(Keys.M))
{
gameState = GameState.HelpScreen;
}
if (keyState.IsKeyDown(Keys.W))
{
Process.Start("IExplore.exe", "www.yahoo.com");
}
}
谢谢
迈克
最佳答案
处理此问题的常见方法是始终跟踪前一帧的键盘状态。如果某个键在前一帧上没有按下,但在本帧上按下,那么您就知道它刚刚被按下。如果按键在前一帧上被按下,那么您就知道它被按住了。
// somewhere in your initialization code
KeyboardState keyState = Keyboard.GetState();
KeyboardState previousKeyState = keyState;
...
private void UpdateSplashScreen()
{
previousKeyState = keyState; // remember the state from the previous frame
keyState = Keyboard.GetState(); // get the current state
if (gameState == GameState.StartScreen)
{
if (keyState.IsKeyDown(Keys.Enter) && !previousKeyState.IsKeyDown(Keys.Enter))
{
gameState = GameState.Level1;
explosionTime = 0.0f;
}
if (keyState.IsKeyDown(Keys.M) && !previousKeyState.IsKeyDown(Keys.M))
{
gameState = GameState.HelpScreen;
}
if (keyState.IsKeyDown(Keys.W) && !previousKeyState.IsKeyDown(Keys.W))
{
Process.Start("IExplore.exe", "www.yahoo.com");
}
}
我通常创建一个 KeyPressed 函数来清理一些东西。
bool KeyPressed(Keys key)
{
return keyState.IsKeyDown(key) && !previousKeyState.IsKeyDown(key);
}
关于xna - Process.Start 在 XNA 游戏中打开太多浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502454/