Продолжаем серию уроков - основы создания игр в GameMaker Studio. Сегодня рассмотрим как сделать простейшую механику выстрела - как сделать выстрел.
Дабы урок не был слишком простым, попробуем очень разные варианты выстрелов, от выстрела по нажатию, до очередей и выстрела с областью поражения.
Как всё это сделано например в игре crimsonland, если бы её делали в GMS2?
По сути нам нужна комната и 3 объекта - герой, пуля и враг.
Ну и спрайты к ним.
Вот примерно так.
В видео я подробно говорю как это всё сделать в гейм мейкер студио 2, хотя если вы читали или смотрели другие мои уроки, вы должны эти вещи знать.
Создаём пулю:
При нажатии на левую кнопку мышки (глобально).
Вообще, нам достаточно вот этого:
Остальное это уже блок (чтобы не создавалось много пуль сразу), а нижние 2 alarm, это просто я делал очередь. Тоже пока не нужно.
Далее, пуля должна лететь куда-то, да? Об этом я уже писал вот тут:
Код движения к курсору мышки при создании пули:
-50+random(100) это разброс при стрельбе, если он вам нужен, можете сделать вот так.
50 - это скорость полёта пули. Довольно быстро, обычно я делаю около 15-30, в зависимости от типа оружия и игры (тут еще зависит от FPS).
Как сделать чтобы враг умирал при касании пули? Если совсем просто:
Тут умирает и враг, и пуля. Пулю тоже не забываем убивать, иначе она будет пролетать через врагов и мочить всех (что тоже иногда надо, но тогда урон посчитается много раз, учитывайте это, если есть система ХП и урона).
Да вот и всё на самом деле! Вот так и делается стрельба.
Как сделать урон и систему ХП? Немного другая тема, но если делать просто:
Один из способов. При этом нам надо в пуле, при создании, прописать её урон (damage). Можно это сделать глобальной переменной (global.damage) и задавать урон в зависимости от навыков, дистанции полёта, оружия и чего угодно.
Вот, хотя это и немного другая тема.
repeat - повторим 5 раз (или сколько вам надо). Нужно например для дробовика.
Тогда мы дополнительно сообщим пуле скорость, но это кривоватый метод.
Тут от центра мышки будет разлёт в квадрате 50 на 50. Можно разлёт сделать переменной.
Так-же очередь можно сделать другим способом, про него я говорю в видео:
Постепенно перехожу на GameMaker Studio 2, поэтому будем делать там, хотя разница минимальна.
Дабы урок не был слишком простым, попробуем очень разные варианты выстрелов, от выстрела по нажатию, до очередей и выстрела с областью поражения.
Как всё это сделано например в игре crimsonland, если бы её делали в GMS2?
Эта игра - лучший пример механики стрельбы в TDS
По сути нам нужна комната и 3 объекта - герой, пуля и враг.
Ну и спрайты к ним.
Все картинки в этой статье кликабельны
Вот примерно так.
В видео я подробно говорю как это всё сделать в гейм мейкер студио 2, хотя если вы читали или смотрели другие мои уроки, вы должны эти вещи знать.
Создаём пулю:
При нажатии на левую кнопку мышки (глобально).
Вообще, нам достаточно вот этого:
instance_create_depth(x,y,0,obj_bullet)
Остальное это уже блок (чтобы не создавалось много пуль сразу), а нижние 2 alarm, это просто я делал очередь. Тоже пока не нужно.
Далее, пуля должна лететь куда-то, да? Об этом я уже писал вот тут:
Код движения к курсору мышки при создании пули:
move_towards_point(mouse_x,mouse_y,50)
-50+random(100) это разброс при стрельбе, если он вам нужен, можете сделать вот так.
50 - это скорость полёта пули. Довольно быстро, обычно я делаю около 15-30, в зависимости от типа оружия и игры (тут еще зависит от FPS).
Как сделать чтобы враг умирал при касании пули? Если совсем просто:
Тут умирает и враг, и пуля. Пулю тоже не забываем убивать, иначе она будет пролетать через врагов и мочить всех (что тоже иногда надо, но тогда урон посчитается много раз, учитывайте это, если есть система ХП и урона).
instance_destroy(self)
instance_destroy(other)
Да вот и всё на самом деле! Вот так и делается стрельба.
- Герой создаёт пулю при нажатии на мышку (или куда хотите)
- Пуля летит туда, где находится мышка (или куда хотите)
- Пуля убивает врага, или наносит ему урон.
Как сделать урон и систему ХП? Немного другая тема, но если делать просто:
В создании врага: hp=100
Можно например еще: armor = 5
При коллизии (столкновении) пули и врага:
other.hp-=self.damage-other.armor
Один из способов. При этом нам надо в пуле, при создании, прописать её урон (damage). Можно это сделать глобальной переменной (global.damage) и задавать урон в зависимости от навыков, дистанции полёта, оружия и чего угодно.
Сделаем урон например 10, а броня 5, то будет наноситься урон 5.
Как убивать? Там-же, при коллизии пули и врага пишем:
instance_destroy(self) // пулю тоже не забываем убиватьother.hp-=self.damage-other.armor
if other.hp<=0 then instance_destroy(other)
Вот, хотя это и немного другая тема.
Как сделать чтобы пуля тупо летела например наверх?
При создании пули пишем vspeed-=10 (Или другое число / переменную)
Либо же в шаге (step) пишем y-=10
Как сделать чтобы вылетало сразу несколько пуль?
При создании пули (в герое), пишем:
repeat(5) instance_create_depth(x,y,0,obj_bullet)
repeat - повторим 5 раз (или сколько вам надо). Нужно например для дробовика.
Как сделать разлёт пуль?
Можно просто при создании прописать у пули:
vspeed=-1+random(2)
hspeed=-1+random(2)
Тогда мы дополнительно сообщим пуле скорость, но это кривоватый метод.
Лучше при определении направления полёта, писать:
move_towards_point(mouse_x-50+random(100),mouse_y-50+random(100),50)
Тут от центра мышки будет разлёт в квадрате 50 на 50. Можно разлёт сделать переменной.
Как сделать очередь и что будет в итоге?
Примеров у меня на ютуб канале уже полно, допустим вот:
Примеров у меня на ютуб канале уже полно, допустим вот:
Очень короткое видео, тестирую пулемёт. Смотрите
Либо делаем патроны (ammo) переменной (глобальной или локальной), а потом просто проверяем их наличие. Тогда при создании пули, пишем:
if ammo>0{
instance_create_depth(x,y,0,obj_bullet)
ammo-=1
}
Если у нас 10 пуль (пишем в create: ammo = 10, у героя), тогда он быстро выпустит 10 пуль и всё. Дальше уже нужно будет делать перезарядку.
Смотрите исходник Lonely Dude, там всё это есть.
Так-же очередь можно сделать другим способом, про него я говорю в видео: