Menu xna如何在游戏中设置控件

Menu xna如何在游戏中设置控件,menu,xna,key,controls,installation,Menu,Xna,Key,Controls,Installation,我希望能够进入我正在开发的游戏中的选项菜单并设置我的控件。 这是一个简单的乒乓球游戏(目前),每个玩家的控制只是上下浮动 这就是我希望这个过程的样子:我单击设置控件,游戏显示我应该更改的控件的名称并等待,我单击键盘上我希望更改的按钮,游戏读取它并显示我应该更改的下一个控件,依此类推,直到我更改所有控件 我已经找到了一种方法,现在我的代码基本上如下所示: if (optionsBList.IsButtonClicked("SETUP CONTROLS")) //when i click the

我希望能够进入我正在开发的游戏中的选项菜单并设置我的控件。 这是一个简单的乒乓球游戏(目前),每个玩家的控制只是上下浮动

这就是我希望这个过程的样子:我单击设置控件,游戏显示我应该更改的控件的名称并等待,我单击键盘上我希望更改的按钮,游戏读取它并显示我应该更改的下一个控件,依此类推,直到我更改所有控件

我已经找到了一种方法,现在我的代码基本上如下所示:

if (optionsBList.IsButtonClicked("SETUP CONTROLS")) //when i click the 
                                                    //SETUP CONTROLS button
                                                    //in the options menu
{
    KeyboardState currentKeyboardState =  new KeyboardState();
    waitingForKey = true;
    while (waitingForKey)
    {
        if(currentKeyboardState.GetPressedKeys().Count() > 0)
        {
            player1.upkey = currentKeyboardState.GetPressedKeys()[0];
            //the path for the key isn't player1.upkey, but lets say it is.
            waitingForKey = false;
         }
    }
 }
在这段简短的代码中,我的目标是只更改一个键。如果我能让它改变1键,改变更多不会是一个问题

问题是,当我点击设置控制按钮时,我不明白为什么我的游戏停止响应。我没有看到无限循环,也没有内存泄漏。
为什么我的游戏会崩溃?有没有更好的方法来加载选项菜单中的控件?

如果你看到问题中链接的答案,你会注意到他实际上删除了
循环,并将其作为
如果
语句

正如Nico Schertler所说:“while(waitingForKey)是你的无限循环。这个循环会阻塞游戏线程,因此无法识别进一步的输入。”

从您的链接链接到答案:


while(waitingForKey)
是您的无限循环。该循环会阻塞游戏线程,因此无法识别进一步的输入。将
while
更改为
if
应该可以工作,只要每次更新时都执行此代码。现在它不会崩溃,但不再工作。我没有提到这种代码的和平是不断更新的,所以对此感到抱歉。
if (optionsBList.IsButtonClicked("SETUP CONTROLS")) //when i click the 
                                                    //SETUP CONTROLS button
                                                    //in the options menu
{
    KeyboardState currentKeyboardState =  new KeyboardState();
    waitingForKey = true;
    if (waitingForKey )
    {
        if(currentKeyboardState.GetPressedKeys().Count() > 0)
        {
            player1.upkey = currentKeyboardState.GetPressedKeys()[0];
            //the path for the key isn't player1.upkey, but lets say it is.
            waitingForKey = false;
         }
    }
 }