Математика Перехода в 2D игре

Мне пришлось перезапустить VS, и это сработало для меня. Не нужно было удалять какие-либо временные файлы или что-либо еще.

да, это немного неудобно, но меньшее из всех зол, я думаю.

8
задан Peter O. 24 June 2015 в 00:27
поделиться

4 ответа

Разве вам не следует регулировать скорость прыжка в зависимости от прошедшего времени? То есть, возможно, скорость изменится на -75 / сек, поэтому ваш diff должен быть весом для количества изменений, примененных к jumpSpeed.

Итак, передайте diff в checkGrav и выполните что-то вроде ... jumpSpeed ​​+ = ( diff * (rate_per_second)) / 1000;

(при условии, что разница в миллисекундах)

(В идеале это будет похоже на настоящую гравитацию: D)

5
ответ дан 5 December 2019 в 20:18
поделиться

Похоже, это скорее вопрос игрового дизайна, чем математика прыжка. Распространенная проблема заключается в том, что в играх, запущенных на разных процессорах, одна игра будет выполняться быстрее, а в других играх - медленнее (что изменяет всю скорость игры). Я не уверен, что такое обычная практика в играх, но всякий раз, когда я делал самодельные 2D-игры (их было весело делать), у меня была концепция игрового тика. На более быстрых машинах

long diff = System.currentTimeMillis() - lastLoop;
lastLoop = System.currentTimeMillis();

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

0
ответ дан 5 December 2019 в 20:18
поделиться

Почему бы просто не масштабировать все константы по разности?

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

3
ответ дан 5 December 2019 в 20:18
поделиться

Я могу дать такую ​​формулу (я использую ее везде). X - это параметр, начинающийся с нуля и заканчивающийся длиной прыжка. если вы хотите, чтобы кто-то прыгнул на некоторой высоте (H) и на некоторой длине (L), тогда функция прыжка будет выглядеть вот так (и он никогда не сможет выглядеть иначе):

y = минус (мощность (x - длина прыжка, деленная на два) умножить на 4 и умножить на высоту прыжка ) разделите на степень длины и прибавьте высоту прыжка в самом конце.

y = - (xl / 2) (xl / 2) * 4 * h / (l * l) + h

И если вы хотите, чтобы прыгающий объект приземлился на что-то, тогда вы можете проверять каждый новый X если он примерно стоит на платформе и стоит на чем-то, то не заставляйте его просто останавливаться, сделайте его положение Y точно равным Y платформы.

Если вы используете что-то вроде Flash или другой базы с перевернутой осью y, умножьте результат функции на -1;

0
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: