Может кто-нибудь объяснить, как экспериментировать со значением гравитации?

Я следую руководству о том, как играть в клон Flappy Bird в среде LibGdx. -http://www.kilobolt.com/day-5-the-flight-of-the-dead---adding-the-bird.html

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

private Vector2 position;
private Vector2 velocity;
private Vector2 acceleration;
private float rotation; // For handling bird rotation
private int width;
private int height;

и он инициализирует эти переменные экземпляра или поля внутри конструктора

 public Bird(float x, float y, int width, int height) {
    this.width = width;
    this.height = height;
    position = new Vector2(x, y);
    velocity = new Vector2(0, 0);
    acceleration = new Vector2(0, 460);
}

Автор объяснил, что постоянное ускорение 460 в направлении y связано с гравитацией, то есть земная гравитация заставляет объект ускоряться на 9,8 м/с каждую секунду или 9,8 м/с^2.

На вопрос, как он определил 460, автор ответил: «Ускорение определено экспериментально. Его значение не меняется».

Мой вопрос: как бы вы поэкспериментировали с этим значением? Какую информацию вы бы использовали. Я думаю, что понимание процесса, стоящего за этими экспериментами, было бы полезно разработчикам, которые пытаются включить гравитацию в свои приложения. Я думаю, что это 460 будет с точки зрения игровых единиц, где автор, Джеймс, ранее определил как cam.setToOrtho(true, 136, 204);


person committedandroider    schedule 26.01.2015    source источник
comment
Физические движки FYI в играх на самом деле нельзя сравнивать с физикой реального мира, поэтому обычные физические формулы и константы часто оказываются плохо работающими, даже для игр, которые пытаются имитировать близко к реальности (например, движение планет и гравитация). Так что обычно вы берете реальные физические константы/формулы, чтобы получить нормальное поведение, а затем начинаете настраивать значения/формулы, пока они не станут подходящими для игры.   -  person LearnCocos2D    schedule 26.01.2015


Ответы (2)


Под «экспериментально определенным» автор просто имеет в виду пробовать различные значения, пока не найдет то, что сработало. Здесь нет математики или сложной магии. Чтобы поэкспериментировать с ним, просто измените его и снова запустите программу. Если вам нравится то, что вы видите, используйте это. Если нет, отрегулируйте его соответствующим образом.

Число 9,8 м/с² — это всего лишь ссылка на то, как работает гравитация Земли. Это не имеет ничего общего с реальной реализацией игры.

person Alexis King    schedule 26.01.2015
comment
Так на самом деле это просто тестирование случайных значений? А разве нельзя было рассчитывать на это? Например, конвертировать пиксели в метры или что-то в этом роде? - person committedandroider; 26.01.2015
comment
@committedandroider Вы могли, но, вероятно, это было бы не лучшим решением с точки зрения игрового дизайна, и это было бы огромной тратой времени. - person Alexis King; 26.01.2015

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

person MilanG    schedule 26.01.2015