2016-05-01 2 views
0

будет держать этот короткий и простой:Monogame - Key «Pressed» вместо «Держать», чтобы прыгать

У меня есть 2D игры с подвижным характером, и я написал некоторый код, чтобы мой игрок прыгать, как так:

if (Keyboard.GetState().IsKeyDown(Keys.Space) && hasJumped == false) 
{ 
    sound.Play(volume, pitch, pan); // plays jumping sound 
    position.Y -= 5f;    // position of jump 
    velocity.Y = -10.5f;   // velocity of jump 
    hasJumped = true; 
} 

Однако, когда я зажмите Space Bar, мой игрок будет продолжать прыгать, когда он попадает на землю, но я хочу, чтобы мой игрок только прыгать раз в течение срока действия удерживая Пробел , а затем снова нажать его, чтобы прыгать.

Я ценю любую помощь.

UPDATE

Моя скорость сбрасывается в одном из моих столкновений, если операторы в пределах моей Collision() функции:

if (rectangle.touchTopOf(newRectangle)) 
{ 
    rectangle.Y = newRectangle.Y - rectangle.Height; 
    velocity.Y = 0f; // velocity reset 
    hasJumped = false; 
} 

ответ

2

Как Брайан уже упоминалось вам нужна переменная, чтобы помнить, если пробел была нажата последней поставить галочку. Что-то вроде этого должно решить вашу проблему.

if (Keyboard.GetState().IsKeyDown(Keys.Space) && hasJumped == false && !spacebarDown) 
{ 
    sound.Play(volume, pitch, pan); // plays jumping sound 
    position.Y -= 5f;    // position of jump 
    velocity.Y = -10.5f;   // velocity of jump 
    hasJumped = true; 
    spacebarDown = true; 
} 
if(Keyboard.GetState().IsKeyUp(Keys.Space)) 
{ 
    spacebarDown = false; 
} 
+0

При объявлении пробелаДалее, в каком значении 'bool' вы его устанавливаете? Кажется, это работает, пока мой игрок находится в воздухе. – toadflax

+0

Я бы сказал, что это ложь, но это не должно влиять ни на что, как только вы нажали пробел. – DeadlySurprise

 Смежные вопросы

  • Нет связанных вопросов^_^