1

С помощью Phaser (и следуя инструкциям) прыжки очень легки с предоставленным физическим модулем Arcade. Тем не менее, у него есть досадный факт, что игрок может прыгать только тогда, когда он «находится на земле» из-за использования логики игрока-касания.Как включить прыжки «прямо перед» игрок касается земли в Phaser?

Код, который я использую, основан на Game Mechanic Explorer, Platformer #4 и следует;

var canJump = this.player.body.touching.down; 

if (canJump && this.upInputIsActive()) { 
    this.player.body.velocity.y = this.JUMP_SPEED; 
} 

Я хотел бы, чтобы позволить игроку возможности прыгать, когда они действительно близко к земле, но еще не прикасаясь так, что повторный прыжок/прыжок-а-посадки больше жидкости , Таким образом, и наблюдение, что предел вызван touching.down игрока, мои вопросы;

  1. Можно определить расстояние («как высоко») игрок из земли (которая может быть платформой) непосредственно под ними? Тогда canJump - это просто функция расстояния, правда, только для очень малых значений.

  2. Может ли быть распространен виртуальный хит-поле вокруг игрока (который будет путешествовать с игроком), так что его собственный touching.down может быть использован для обнаружения этого случая? Этот подход лучше? Сам спрайт игрока не должен левитироваться с земли или иначе быть выполненным.

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

+0

Необходимо создать таймер, требующий ToJump, и установить его на определенное время или количество шагов, когда пользователь пытается прыгнуть, находясь в воздухе, а затем подсчитывать его во время обновления. Пока wantToJump больше 0, игрок должен мгновенно прыгать, когда обнаруживается касание земли. – LearnCocos2D

+0

@ LearnCocos2D Это текущее поведение, если удерживать кнопку «вверх» нажатой (и такой подход действительно скопировал бы ее для одного пресса с небольшим погрешностью), но моя цель - фактически позволить игроку «обмануть/играть», системы на несколько пикселей. В моей текущей игре игрок отскакивает крошечный бит (и падает медленнее), чем в связанном примере. – user2864740

+0

Я бы не пошел по этой дороге, если вы это сделаете, это означает, что регулярный прыжок может достигать высоты 100 пикселей, но если вы совершаете непрерывный прыжок, второй прыжок может достигать высоты 105 пикселей, что, возможно, позволяет игроку идти к местам, где она не должна. Плюс это, вероятно, не будет выглядеть/чувствовать себя лучше. Игроки ожидают, что игрок снова прыгнет, коснувшись земли, а не чуть выше. Возможно, у вас есть 1-кадровая задержка между регистрацией наземного касания и повторным прыжком, что вызывает небольшую задержку перед повторным прыжком? – LearnCocos2D

ответ

3
  1. Не "изначально". Нет ПЗС-матрицы или смотреть вперед, тело касается только направления движения. То, что вы пытаетесь достичь, широко известно как использование датчика. P2 поддерживает датчики, но Arcade Physics не делает этого, поэтому вам придется имитировать его - либо создав второе тело (которое вы упоминали в пункте 2), либо используя маркер. Это может быть простой объект Point, который «отбрасывается», когда он прыгает, и затем вы можете использовать встроенные дистанционные проверки между точкой и телом для обеспечения вашего требования «близкого перехода».

  2. Да, это возможно, но ваш спрайт будет «плавать» в воздухе. Итак, см. Пункт 1 :)

+0

Я решил «решить» эту задачу, создав небольшое тело (перемещенное вручную с помощью главного спрайта, а не физикой) и используя тест перекрытия. – user2864740

 Смежные вопросы

  • Нет связанных вопросов^_^