Есть несколько способов сделать это.
1.) Вы можете использовать глобальное состояние для отслеживания логического значения нажатия клавиши. Проверьте «ложь» перед прыжком, установите «истинно» при прыжке, установите «ложь» при приземлении. В некоторых играх допускается двойной прыжок, поэтому вместо этого вы можете увеличивать и уменьшать счетчик нажатия клавиш.
global has_jumped = False
if keys 1 and has_jumped is False:
pos[1] ++
has_jumped is True
// Apply gravity here.
if pos[1] <= 0: // Presumes ground is at Y = 0
has_jumped is False
2.) В качестве альтернативы, более надежный способ сделать это - рассчитать, стоит ли игрок на карте. и используйте это, чтобы решить, может ли персонаж прыгнуть.
global player_acceleration_y = -10 // Gravity, in delta pixels per loop
global player_velocity_y = 0 // Velocity in pixels per loop
function loop():
pos[1] += player_velocity_y
player_velocity_y += player_acceleration_y
if pos[1] <= 0: // Just using a ground plane of 0 here. You could use more complex collision logic here.
pos[1] = 0 // Make sure we don't fall through the floor.
player_velocity_y = 0 // Stop falling.
if keys 1: // Jump
if pos[1] <= 0:
player_velocity_y = 30 // Jump up at a rate of 30 pixels per loop, which will be offset by gravity over time.