Обычный способ справиться с этим - дать игроку импульс скорости в направлении y и с некоторой физикой. Если jumpVel
является скорость в направлении оси у, она будет выглядеть следующим образом (я добавлю в некоторых стилистических советы, а):
if (keystate[keys[7]]) //Keys 7 = SPACE Button
{
jumping = true;
// unnecessary to set jumping to true and just check it directly afterwards. Just add it here instead
jumpVel = 1.0; // Set this to some value, this is the impulse you give the player when he jumps
}
// Okay, time to update the position. Lets limit the player so he can't go below 0
if (positionRect.y > 0) {
positionRect.y += jumpVel * delta; // This is how you calculate the new position given speed and change in time
}
// gravity affects the speed with which we fall
jumpVel -= 9.8 * delta;
нравится! Теперь реализация выше позволяет игроку летать, если вы держите пробел, но если вы его отпустите, вы должны увидеть, как парень падает. Я оставлю его в качестве упражнения, если вы хотите, чтобы ограничить максимальную высоту :)
EDIT: Ваша ось у перевернута, так что мы должны изменить это соответственно:
if (keystate[keys[7]]) //Keys 7 = SPACE Button
{
jumping = true;
jumpVel = 1.0;
}
// the character is above the bottom of the screen
if (positionRect.y > 480) {
positionRect.y -= jumpVel * delta;
// note:^we just flip the axis
}
jumpVel -= 9.8 * delta;
edit2: Хорошо , позволяет пропустить физику на данный момент. Самый простой способ реализовать поведение, которое вы хотите это
if (positionRect.y > 0 && positionRect.y < 480) {
// We are inside the screen bounds
if (keystate[keys[7]]) {
positionRect.y -= 1.0; // jump
} else {
positionRect.y += 1.0; // fall
}
}
Удалите jumping
/falling
/maxjumpheight
флаги.
EDIT3: Ах, конечно. Позволяет изменить его еще раз.
if (keystate[keys[7]]) {
if (positionRect.y > 0) positionRect.y -= 1.0; // jump if below the top
} else {
if (positionRect.y < 480) positionRect.x += 1.0; // fall if above the bottom
}
', если (maxjumpheight == 40) { maxjumpheight == 0; } 'не будет часто. –
Можете ли вы объяснить лучше? Я просто хочу сделать это простым: Когда игрок прыгает в перебежку ++; , поэтому, если высота прыжка равна 40, его необходимо снова вернуть к нулю. – BalioFVFX
@BalioFVFX Я предполагаю, что вы хотели использовать назначение ('='), а не сравнивать значения и отбрасывать результат. – keltar