Как не дать игроку дважды прыгнуть в воздухе?

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

Когда я удаляю второй оператор if, игрок один раз подпрыгивает в воздухе, а при повторном нажатии прыгает из воздуха.

Вот мой класс mycontactListener, в котором он проверяет, находится ли игрок на земле или нет. По какой-то причине он не вычисляет numFootContacts игрока, находящегося на земле.

Как остановить игрока от прыжков дважды или в воздухе?

Рассматривали ли вы добавление некоторой отладки в isPlayerOnGround(), чтобы понять, почему он возвращает true, когда вы думаете, что он должен возвращать false?

dgnuff 26.07.2018 22:43

он возвращает false, когда игрок находится в воздухе, и true, когда игрок находится на земле. Пока не отлаживал. По умолчанию он возвращает false, поскольку numFootContact равен 0.

satya 26.07.2018 22:57

Если выясняется, что он возвращает истину, когда вы думаете, что плеер не должен находиться на земле, то начните проверять, правильно ли обновляется numFootContacts. А затем продолжайте следовать по следу из хлебных крошек, пока не найдете первопричину. Отладка - это навык, на освоение которого нужно время. У вас здесь хорошая основа, но потребуется практика, чтобы она стала второй натурой. Хорошее правило: «Никогда не предполагайте, что какая-либо часть вашей программы работает правильно, пока вы не убедитесь, что она работает правильно во всех случаях». Удачи!

dgnuff 26.07.2018 23:05

В классе contactListener он получает приспособление для игрока и алмаза, но не для стопы. Я не могу достать третий прибор под названием Foot. Как это получить?

satya 27.07.2018 02:30

Вам нужна ступня? Разве нельзя просто использовать контакт между игроком и бриллиантом?

dgnuff 27.07.2018 02:40

Мне он нужен для столкновения плитки с ногой ...! Позже мне придется изменить цвет плитки, на которую приземлится игрок!

satya 27.07.2018 03:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
162
1

Ответы 1

Лучше проверить, равно ли значение скорости по оси 0. На самом деле вы можете прыгать, только если вы не прыгаете и не падаете, я имею в виду, только если вы стоите.

Вот код:

if (MyInput.isPressed(MyInput.SPACE) &&
    player.getBody().getLinearVelocity().y==0)
    player.getBody().applyForceToCenter(0, 150, true);

Другие вопросы по теме