Логика игрового прыжка

Я создаю 2D игру Mario.

Следующая функция предназначена для обновления игрокаПоложение s при нажатии определенной клавиши. Игроку разрешено перемещаться влево и вправо и прыгать в одном и том же месте или прыгать влево или вправо (для образования дуги).

 bool updatePlayerPosition(Movement* mov){
        if (this->keyPressed(SDLK_RIGHT)) {
            mov->applyForce(1); // Changes the velocity in X
        }   
        if (this->keyPressed(SDLK_LEFT)) {
            mov->applyForce(-1);  // Changes the velocity in X
        }           
        if (this->keyPressed(SDLK_SPACE)) {
            mov->jump();        // Changes the velocity in Y
        }       
        if (this->keyPressed(SDLK_DOWN)) {
            mov->fallDown();   // Changes the velocity in X and Y
        }

        Point* pos = mov->getPosition();

        // Check whether the position is out of bounds
        if(Level::allowsMove(pos)){
              // If it is not, I update the player's current position
              position->x = pos->x;
              position->y = pos->y;
              return true;
        }
        // If the movement is not allowed, I don't change the position
        else {
              mov->setPosition(*position);
              return false;
        }
    }

Вот ошибка: когда я достигаю конца уровня (который имеет фиксированную ширину), и если я пытаюсь двигаться вправо и прыгатьв то же время, игрок прыгает и остается в воздухе. Только когда я освобождаю пробел, игрок падает на землю.

Как я могу это исправить?

Ответы на вопрос(2)

Ваш ответ на вопрос