Многократные нажатия клавиш в XNA?

Я действительно пытаюсь сделать что-то довольно простое.

Я не могу получить несколько нажатий клавиш для работы в XNA. Я пробовал следующие фрагменты кода.

else if (keyboardState.IsKeyDown(Keys.Down) && (keyboardState.IsKeyDown(Keys.Left)))
{
      //Move Character South-West
}

и я попробовал.

else if (keyboardState.IsKeyDown(Keys.Down))
            {
                if (keyboardState.IsKeyDown(Keys.Left))
                {
                      //Move Character South-West
                }
            }

Ни для меня не работало. Одиночные прессы работают отлично. Любые мысли?

5 голосов | спросил Bryan Harrington 25 SatEurope/Moscow2010-12-25T00:20:10+03:00Europe/Moscow12bEurope/MoscowSat, 25 Dec 2010 00:20:10 +0300 2010, 00:20:10

3 ответа


7

Используйте GetPressedKeys (), чтобы получить все текущие нажатые клавиши и повторить их выполнение, что вы хотите.

Если вы перемещаете плеер или что-то в этом роде, создайте начальный векторный элемент 3 в начале и добавьте ему значения модификатора и добавьте его в позицию игрока после завершения проверки ввода.

Что-то вроде этого:

Vector3 positionToAdd = Vector3.Zero;
Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys();
foreach( Keys key in currentPressedKeys )
{
    if( key == Keys.W )
        positionToAdd += Vector3( 0.0f, 1.0f, 0.0f );

    if( key == Keys.S )
        positionToAdd += Vector3( 0.0f, -1.0f, 0.0f );

    if( key == Keys.A )
        positionToAdd += Vector3( -1.0f, 0.0f, 0.0f );

    if( key == Keys.D )
        positionToAdd += Vector3( 1.0f, 0.0f, 0.0f );
}

player.Position += positionToAdd;

Лично я этого не делаю, я просто использую if statements WITHOUT else, чтобы убедиться, что поток программы не прерывается непреднамеренно.

Луч

ответил Ray Dey 25 SatEurope/Moscow2010-12-25T04:55:04+03:00Europe/Moscow12bEurope/MoscowSat, 25 Dec 2010 04:55:04 +0300 2010, 04:55:04
1

Ваши аргументы if могут влиять на поток программы. Попробуйте перестроить свой код или установить флаги бит для каждой нажатой клавиши. Или, может быть, ваша клавиатура не поддерживает одновременное нажатие некоторых клавиш (это происходит с моим старым ноутбуком).

ответил r2d2rigo 25 SatEurope/Moscow2010-12-25T01:10:37+03:00Europe/Moscow12bEurope/MoscowSat, 25 Dec 2010 01:10:37 +0300 2010, 01:10:37
0

У меня была та же проблема, когда я использовал клавиши со стрелками в сочетании с пробелом на моем компьютере. Я сменил клавиши со стрелками на WASD, и проблема исчезла.

ответил Andrew W 30 AMpTue, 30 Apr 2013 07:27:58 +040027Tuesday 2013, 07:27:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132