Реализация очень простой гравитации в пигме - PullRequest
1 голос
/ 29 октября 2019

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

if keys 1
    pos[1] ++
unless you just jumped

В основном, позволяя мне получать информацию отпредыдущие циклы моего основного игрового цикла.

1 Ответ

2 голосов
/ 29 октября 2019

Есть несколько способов сделать это.

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.
...