Блог ☯

вторник, 2 мая 2017 г.

Основы создания игр - удар в ближнем бою. GameMaker

Приветствую. Сегодня рассмотрим базовую механику при создании игр - удар в ближнем бою. Как это сделать в гейм мейкер студио (Game Maker Studio), как это вообще работает и какие есть способы сделать ближний бой для игры любого жанра, от RPG до платформера.

Это пока идут всё еще основы создания игр, хотя более сложные темы я тоже касаюсь.


Для статьи и видео (чуть позже) я использовал некоторые материалы Shaun Spalding

Итак, как делается удар в ближнем бою, будь то меч, булава, лазерная сабля или что угодно.

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

Если вы не знаете как сделать стрельбу, можете посмотреть вот эти статьи и там-же видео:


Однако одну тему я так и не покрыл, хотя она тоже простая - это области поражения и splash (урон по области). Это есть например в моей игре Space Rush, Там при уничтожении пули, наносится дополнительный урон в области поражения.

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

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

Ладно, как-же сделать сражение в ближнем бою в своей игры, если мы делаем игру с нуля.

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

Огнемёт в этом смысле работает похожим образом. Как создавать пули вы уже должны знать и как сделать чтобы они летели в направление которое вам нужно (например к курсору мышки), ну вот так-же можно сделать и удар в ближнем бою.

Вся разница будет в том, что мы сделаем пулю невидимой, и будем уничтожать её очень быстро, чтобы урон наносился только вблизи. Так-же тут нам нужна будет особая анимация, но этот момент я не особо покрывал, хотя в том-же Lonely Dude есть эти моменты.

Как и есть видео про анимацию на моём канале в ютуб - Econ Dude. Даже два видео:





Лучше посмотрите второе видео, хотя начало первого тоже норм.

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

Так-же тут важно сказать что иногда вам нужна область поражения удара в ближнем бою, вот тогда вам и пригодиться другой способ.


Еще раз посмотрите на эту картинку

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

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

Тут есть два способа и тут вам как раз я советую почитать вот эту статью:


По той-же логике, что пуля не коцает одного врага больше чем один раз, можно сделать и удар в ближнем бою. Записываем ID врагов в пулю (область поражения - hit box). 

Другой способ - это уничтожать данную область поражения через 1 тик, моментально. 

Для этого вы можете в events (события) выбрать post draw (после отрисовки) и написать там instance_destroy() 

В этом случае область поражения будет соприкасаться с объектами только 1 тик - минимальный отрезок времени и потом сразу уничтожаться.

Вчера я добавил в свою игру возможность ближнего боя очень простым способом, ну и сделал видео, где показал как всё это примерно может выглядеть: