Я создаю простую игру Plattformer Jump n 'Run Style. Я не использую плитки - вместо этого у меня есть геометрические фигуры для моих уровней (и игрок тоже один). Я закончил код обнаружения столкновений, и пока все работает нормально.
Далее я хотел реализовать прыжки. Просто проверяйте, нажимает ли игрок соответствующую клавишу и добавляют ли скорость вверх. Работает отлично. Но это работает, даже если игрок находится в воздухе, а это не то, что я хочу. ;-)
Итак, я должен проверить, стоит ли игрок на чем-то. Моя первая идея состояла в том, чтобы проверить, не было ли столкновения в последнем кадре, и пометить игрока как «способного прыгать», но это даже сработало бы, если бы игрок столкнулся со стеной в воздухе. Поскольку мои математические навыки не так хороши, я прошу помощи - даже советы помогут сделать это.
Благодарность!
Вы обязательно должны реализовать какой-то тип поверхности. Подумайте об этом, как вы справитесь, если сможете подняться по лестнице, если не знаете, столкнулся ли ваш персонаж со стеной или лестницей? Вы можете просто использовать ООП для управления иерархией типов, используя наследие, но я бы предложил вам использовать «категории», реализованные с использованием перечислимого типа:
Вот идея: перечисление «Столкновения» имеет флаг для каждой категории. Например:
С помощью этого метода вы сможете проверить, сталкивался ли игрок с чем-либо, с чем вы должны управлять, поэтому ваш движок может вызвать «Collided» метод сущности:
В этом методе используются побитовые флаги и побитовый оператор «ИЛИ», чтобы гарантировать, что каждая группа имеет различное значение в зависимости от двоичного значения категории. Этот метод отлично работает и легко масштабируется, поэтому вы можете создавать таможенные коллизионные группы. Каждый объект (игрок, враг и т. Д.) В вашей игре имеет несколько битов, называемых «фильтром», которые используются для определения того, с чем он может столкнуться. Ваш код столкновения должен проверить, соответствуют ли биты и реагируют ли они соответствующим образом, с некоторым кодом, который может выглядеть так:
источник
Если вы считаете, что нога вашего персонажа всегда находится под персонажем на определенном расстоянии, и если вы не удаляетесь от поверхности, то ваш персонаж находится на земле.
В грубом псевдокоде:
источник
char
, даже в псевдокоде.