Логика игрового прыжка
Я создаю 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;
}
}
Вот ошибка: когда я достигаю конца уровня (который имеет фиксированную ширину), и если я пытаюсь двигаться вправо и прыгатьв то же время, игрок прыгает и остается в воздухе. Только когда я освобождаю пробел, игрок падает на землю.
Как я могу это исправить?