Тот же прыжок с изменением силы тяжести - PullRequest
2 голосов
/ 30 июня 2019

Я пытаюсь воссоздать автономную игру Dino от Google-Chrome. В этой игре у Дино есть сила тяжести, и у него есть скорость прыжка, скорость, применяемая, когда пользователь нажимает клавишу пробела.

Со временем препятствия движутся все быстрее и быстрее к игроку. Когда препятствия движутся быстрее, прыжок Дино также должен быть быстрее.

Я пытался сделать более быстрый прыжок, увеличивая гравитацию с течением времени, поэтому Дино спустился быстрее. Но как я могу заставить Динозавра прыгать на ту же высоту, скажем, на 50 пикселей вверх, независимо от силы тяжести.

Я пытался работать с формулой: у = 0,5 * а * т ^ 2 + v (0) * т Но я не могу прийти к правильному ответу.

Канва, с которой работает этот код, в качестве исходного положения в левом верхнем углу (0,0). Следовательно, скорость скачка отрицательна, а гравитация положительна.

Этот код находится внутри класса Dino, где он ссылается на Dino. В конструкторе класса Dino у меня есть код

this.y = 0;
this.vy = 0;
this.gravity = 1;
this.speed = 0;

В функции обновления, которая вызывается каждые x раз:

this.speed += 0.001;
this.y += this.vy;
this.vy += this.gravity;
this.gravity += speed*0.001;

Функция перехода - выполняется при нажатии пробела:

this.vy = (-?);

Количество пикселей, которые прыгает Дино, увеличивается со временем. Как я мог заставить Динозавра прыгать на одинаковое количество пикселей каждый раз, независимо от силы тяжести?

1 Ответ

1 голос
/ 01 июля 2019

Так что лично я бы сделал это немного по-другому. Я бы указал максимальный у; самая высокая точка, которую может прыгнуть наш объект. Затем, когда игрок нажимает кнопку прыжка, он линейно интерполирует в эту позицию, это прекрасно работает для вашей задачи, так как в p5 они избаловали нас функцией lerp () , где Вы можете указать сумму, на которую можно рассчитывать, чтобы чем быстрее ваша игра становилась, тем быстрее мы хотим, чтобы игрок прыгал, и тем выше мы устанавливаем показатель.

Чтобы определить, насколько быстро мы используем lerp, я использовал upSpeed, который вы увеличиваете по ходу игры:

const MAX_Y = 150;
let y = 370;

let upSpeed = 0.1;

function setup() {
  createCanvas(400, 400);
  
}

function draw() {
  background(220);
  
  fill(255, 100, 100);
  
  y = lerp(y, MAX_Y, upSpeed);
  ellipse(width / 2, y, 50, 50);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.js"></script>

А затем добавьте магию гравитации в уравнение, и вы получите игру!

...