2013-04-24 3 views
0

Я пытаюсь получить текстуру для включения и выключения, когда нажата клавиша F1, я могу заставить ее включить, но она не отключится снова, если я не использую отдельный ключ для этого.Как определить, нажата ли клавиша несколько раз в xna?

Это работает для меня:

if(Keystate.IsKeyDown(Keys.F1)) 
    { 
     collisionhelp = true; 
    } 

тогда я:

if(Keystate.IsKeyDown(Keys.F2)) 
    { 
     collisionhelp = false; 
    } 

но то, что я хочу, что второй раз нажать клавишу F1, то он устанавливает его ложным, но в настоящее время, что заставляет его просто не появляться вообще.

Я попытался это:

if(Keystate.IsKeyDown(Keys.F1)) 
    { 
     collisionhelp = true; 

     if(collisionhelp == true && Keystate.IsKeyDown(Keys.F1)) 
     { 
      collisionhelp = false; 
     } 
    } 

нет кости на всех, кнопка, даже не делать ничего больше.

Должен быть способ сделать это в XNA, возможно, добавив 1 к целому числу каждый раз, когда нажата клавиша F1, и обнаруживает, может ли ее даже сделать, если false, и если ее странно, чтобы сделать ее правдой?

ответ

0

Может быть, это то, что вам нужно:

if(Keystate.IsKeyDown(Keys.F1)) 
{ 
    collisionhelp = !collisionhelp; 
} 
+0

Я пытаюсь это, и его вызывая много мерцания, что это делает в точности? Я не очень-то знаком с этим! вы ставите перед собой, это инверсия столкновений? –

+0

'!' Называется оператором [not] (https://en.wikipedia.org/wiki/Negation) и инвертирует логическое значение, поэтому '! True == false' и'! False == true'. Вы должны убедиться, что значение изменяется один раз для нажатия кнопки, чтобы предотвратить мерцание. Попробуйте изменить первую строку на 'if (Keystate.IsKeyDown (Keys.F1) && Keystate.IsKeyToggled (Keys.F1))' (не уверен в этом) –

+0

@ Nero-One P.S. Если предыдущий не работает, я неправильно понимаю, что означает функция IsKeyToggled. В этом случае вы добавили ** [this] (http://stackoverflow.com/questions/13259841/button-press-calls-method-multiple-times) ** –

1

Этот код будет переключать collisionhelp логическое значение и выключается, но это будет происходить каждый кадр, что клавиша F1 удерживается нажатой.

if(Keystate.IsKeyDown(Keys.F1)) 
{ 
    collisionhelp = !collisionhelp; 
} 

Так что, если вы работаете в 60fps и удерживайте клавишу F1 в течение 1 секунды, то получится collisionhelp и выключается в 30 раз.

Я думаю, что вы хотите, это второй логический для записи, если кнопка была нажата в предыдущем кадре, и только тумблер столкновения помощи один раз в F1 печати:

if(Keystate.IsKeyDown(Keys.F1)) 
{ 
    if(!f1AlreadyDown) 
    { 
     f1AlreadyDown = true; 
     collisionhelp = !collisionhelp; 
    } 
} 
else 
{ 
    f1AlreadyDown = false; 
} 
Смежные вопросы