Мне пришлось перезапустить VS, и это сработало для меня. Не нужно было удалять какие-либо временные файлы или что-либо еще.
да, это немного неудобно, но меньшее из всех зол, я думаю.
Разве вам не следует регулировать скорость прыжка в зависимости от прошедшего времени? То есть, возможно, скорость изменится на -75 / сек, поэтому ваш diff должен быть весом для количества изменений, примененных к jumpSpeed.
Итак, передайте diff в checkGrav и выполните что-то вроде ... jumpSpeed + = ( diff * (rate_per_second)) / 1000;
(при условии, что разница в миллисекундах)
(В идеале это будет похоже на настоящую гравитацию: D)
Похоже, это скорее вопрос игрового дизайна, чем математика прыжка. Распространенная проблема заключается в том, что в играх, запущенных на разных процессорах, одна игра будет выполняться быстрее, а в других играх - медленнее (что изменяет всю скорость игры). Я не уверен, что такое обычная практика в играх, но всякий раз, когда я делал самодельные 2D-игры (их было весело делать), у меня была концепция игрового тика. На более быстрых машинах
long diff = System.currentTimeMillis() - lastLoop;
lastLoop = System.currentTimeMillis();
было бы ниже. Время ожидания будет выводиться из разницы, чтобы игра работала с одинаковой скоростью на большинстве машин. Я бы также выделил метод рендеринга в отдельный поток, чтобы скорость игры не зависела от графики.
Почему бы просто не масштабировать все константы по разности?
Кстати, мне неловко об этом говорить, но я работал над коммерческой игрой, в которой гравитация был вдвое сильнее для персонажей, идущих вниз, чем восходящих. Почему-то люди предпочли это.
Я могу дать такую формулу (я использую ее везде). X - это параметр, начинающийся с нуля и заканчивающийся длиной прыжка. если вы хотите, чтобы кто-то прыгнул на некоторой высоте (H) и на некоторой длине (L), тогда функция прыжка будет выглядеть вот так (и он никогда не сможет выглядеть иначе):
y = минус (мощность (x - длина прыжка, деленная на два) умножить на 4 и умножить на высоту прыжка ) разделите на степень длины и прибавьте высоту прыжка в самом конце.
y = - (xl / 2) (xl / 2) * 4 * h / (l * l) + h
И если вы хотите, чтобы прыгающий объект приземлился на что-то, тогда вы можете проверять каждый новый X если он примерно стоит на платформе и стоит на чем-то, то не заставляйте его просто останавливаться, сделайте его положение Y точно равным Y платформы.
Если вы используете что-то вроде Flash или другой базы с перевернутой осью y, умножьте результат функции на -1;