Как сделать стрелялку game maker
Econ Dude
Страницы
суббота, 25 марта 2017 г.
Как сделать выстрел и пули в GameMaker Studio 2? Стрельба
Постепенно перехожу на GameMaker Studio 2, поэтому будем делать там, хотя разница минимальна.
Дабы урок не был слишком простым, попробуем очень разные варианты выстрелов, от выстрела по нажатию, до очередей и выстрела с областью поражения.
Как всё это сделано например в игре crimsonland, если бы её делали в GMS2?
Ну и спрайты к ним.
В видео я подробно говорю как это всё сделать в гейм мейкер студио 2, хотя если вы читали или смотрели другие мои уроки, вы должны эти вещи знать.
При нажатии на левую кнопку мышки (глобально).
Вообще, нам достаточно вот этого:
Остальное это уже блок (чтобы не создавалось много пуль сразу), а нижние 2 alarm, это просто я делал очередь. Тоже пока не нужно.
Далее, пуля должна лететь куда-то, да? Об этом я уже писал вот тут:
Код движения к курсору мышки при создании пули:
-50+random(100) это разброс при стрельбе, если он вам нужен, можете сделать вот так.
Как сделать чтобы враг умирал при касании пули? Если совсем просто:
Тут умирает и враг, и пуля. Пулю тоже не забываем убивать, иначе она будет пролетать через врагов и мочить всех (что тоже иногда надо, но тогда урон посчитается много раз, учитывайте это, если есть система ХП и урона).
Да вот и всё на самом деле! Вот так и делается стрельба.
Как сделать стрелялку game maker
Ладно. Приступим к созданию игры. Для начала нам нужно запастись спрайтами:
player_go_right и player_go_left – спрайты движения игрока влево и вправо (анимация).
gun_right – спрайт ружья, направленного вправо. Для этого спрайта установите центр вращения на рукояти, как показано на скриншоте.
bullet_spr – спрайт пули. Никаких особых критериев.
wall_sprite – спрайт стены. Желательно размера 32×32.
Когда спрайты готовы, самое время создать необходимые объекты и естественно настроить их. Начнем с самого простого – стены. Создайте объект wall_obj и присвойте ему спрайт wall_sprite. Также для этого объекта установите свойство Твердость(Solid).
Далее переходим к пулям. Создайте объет bullet_obj и присвойте ему bullet_spr. Чтобы в будущем пуля вела себя более естественно в событии Столкновнение с wall_obj добавьте действие Destroy Instance ( ). По желанию можете увеличить глубину пули.
Все второстепенные объекты готовы. Приступаем к самому сложному. Создайте объект игрока player_obj и присвойте ему спрайт player_go_right или player_go_left. Для player_obj в событии Create введите скрипт( ):
Этот скрипт запускает гравитацию для игрока и уменьшает скорость спрайта до 0. Так же этим кодом мы вводим новую переменную right, с помощью который мы в дальнейшем будем определять направление игрока.
Перейдем к управлению. В событии Step напишите следующий код( ):
200?’200px’:»+(this.scrollHeight+5)+’px’);»>
//Движение вправо
if keyboard_check(vk_right) then
hspeed=5
//Движение влево
if keyboard_check(vk_left) then
hspeed=-5
//Под ногами не пусто? Нажата ли кнопка вверх?
if (not place_free(x,y+3)) and (keyboard_check(vk_up)) then
vspeed=-15 //Прыжок
//Если ничего не нажато
if keyboard_check(vk_nokey) then
begin
hspeed=0
image_index=0
image_speed=0
end;
Этот скрипт позволит игроку ходить влево, вправо и даже прыгать.
Итак, гравитация есть, управление есть, а опоры нет. Чтобы опора появилась добавьте событие Столкновение с wall_obj и введите в это событие:
Ну вот, практически все готово. Игрок уже может смело прыгать по платформе. Но к сожалению анимации движения не будет. Для того чтобы это исправить в событие press введите скрипт:
И в событие press введите аналогичный скрипт:
//Игрок повернут направо?
if right=true then
gun_x=x+15 //Смена положения ружья по X
else
gun_x=x+1
gun_y=y+15//Смена положения ружья по Y
draw_sprite(sprite_index,image_index,x,y) //Прорисовка игрока
draw_sprite_ext(gun_right,0,gun_x,gun_y,image_xscale,image_yscale,rotate,image_blend,image_alpha) //Прорисовка ружья
Если же все работает замечательно, давайте продолжать. Добавьте событие Glob Left Pressed и в него перенесите действие Create Moving ( ) с следующими значениями:
object = bullet_obj;
x= gun_x
y = gun_y
speed= 10
direction= rotate
Видеокурс по GameMaker Studio 2. Стрельба.
И как всегда, оставляйте свои комментарии, замечания и предложения.
Найдены возможные дубликаты
Если вы про Solid, то могу только посоветовать не использовать это свойство объекта. Конечно, оно поможет вам в разработке чего-нибудь простого, но когда зайдет речь об описании какой-нибудь более сложной коллизии, то могут возникнуть всякие непонятные баги, которые хрен знает как исправить. Я крайне советую использовать вместо Solid функции типа place_meeting, instance_place и т.п. Потому что только так вы четко будете понимать, что происходит с объектом.
Я как раз хочу посвятить одно видео этому моменту. Расскажу, как сделать более менее нормальную проверку на столкновение, в которой не будет застреваний и недостолкновения.
Можете, кстати, посмотреть моё первое видео. Там я как раз немного затрагиваю эту тему. Ссылка на видео: https://youtu.be/-F2gn5Rruic
Привет! Хороший видос, сам начинаю постигать азы данной программы.
Так как я очень слаб даже в самом примитивном программирование, то можно один наводящий вопрос? Имеется ли возможность взять меня на обучение по GameMaker Studio 2?
Естественно не за бесплатно, готов платить за это. Ищу наставника, кто бы объяснял мне и тыкал носом в мои косяки.
Я пока что даже не думал об этом, если честно) для меня это будет слишком большой ответственностью, я считаю. Давайте поговорим об этом, когда я хотя бы закончу до конца свой курс. Если у вас еще не пропадет желание к тому времени, то можете написать мне в группу вк: https://vk.com/walkdigidong
Как Construction Script помогает мне в дизайне уровней [UE4]
Всем привет! В этом посте покажу вам как сделать то, что на гифке выше с помощью Blueprints.
Далее рассмотрим Construction Script на примере моей палатки. Он включает две моих функции: Place All Sticks размещает все колышки, а TurnAllRopes поворачивает и скейлит все веревочки.
Чтобы это хорошо работало, я имею (StaticMesh) веревочку длинною 100 юнитов (1 метр) с правильным пивотом. В данном случае, он находится на краю, а сама веревка направлена по локальной оси Х этого меша. Это нужно для того, чтобы дальше было легко поворачивать и скейлить этот объект.
Веревку я привязываю к колышку. Ну, то есть, размещаю «внутри». Таким образом, её координаты будут локальными относительно колышка. А вот вращение для веревки выставляю абсолютным.
У самой палатки я подготовил 8 сокетов, к которым буду «привязывать» веревку.
Теперь вернемся к нашим функциям PlaceAllSticks и TurnAllRopes. На самом деле, в каждой из этих функций просто вызывается 8 раз своя дополнительная функция для единичного случая. То есть, вот на примере с веревками. С колышками то же самое.
Как это работает для единичного случая?
Я еще добавляю небольшой рандом (поэтому на гифке выше колышки немного трясутся). Понятное дело, вы тут должны учесть пивот вашего колышка. В моём случае он по центру и я могу размещать колышек прямо в точке столкновения луча с ландшафтом. Если бы пивот был на кончике, я бы просто добавил вектор смещения в эту функцию.
После того, как мы разместили колышек по ландшафту, в дело вступает функция TurnRope. На вход она принимает саму веревку, а также сокет на палатке, в которому мы будем «привязывать» веревку. Тут, конечно, придется засинхронить всё вручную (подобрать к каждой веревке свой сокет).
Напомню, у нас есть веревка, которая расположена в самом колышке. Теперь нам надо её повернуть и изменить длину.
(Учтите, в моём примере я всё вычисляю в мировых координатах, потому что мне так удобней!)
После поворота, нам остается только поменять длину этой веревочки. Вычисляем расстояние между началом и предполагаемым концом веревочки, делим это расстояние на 100 и забиваем в скейл по Х для нашей веревочки. Вуаля.
(На 100 мы делим потому, что наша веревка изначально длиной в 100 юнитов)
Теперь я могу двигать палатку по ландшафту, а её колышки всегда будут подгоняться под окружающий рельеф. Это намного проще, чем выставлять такие вещи вручную для каждой палатки 🙂
Буду рад, если мой опус кому-нибудь поможет. Спасибо за внимание!
Видеокурс по GameMaker Studio 2
Всем добрый вечер. С вами WalkDiGidong со своим видеокурсом по движку GameMaker Studio 2. Вот уже два года я изучаю данный движок и даже пытаюсь что-то смастерить в нём. Примерно в начале предыдущего года мне очень сильно захотелось сделать пару обучающих видео по этому движку, поскольку мне показался печальным тот факт, что на ютубе так мало видео уроков по GMS на русском языке. Лично мне не особо мешает языковой барьер в этом плане, но в какой-то момент я понял, что нужно внести свой вклад в обучении разработке на GMS. Тогда я пользовался еще движком версии 1.4 и решил подождать, пока вышедшая вторая версия обрастет заплатками и избавится от багов. Теперь, спустя столько времени, я всё-таки решился на создание полноценного курса для новичков по разработке небольшой простенькой игры в жанре Top-Down Shooter.
Многому я научился благодаря таким каналам как Shaun Spalding, HeartBeast, GM Wolf и др. Если кто-то смотрел их видео, то впоследствии поймете, что многое я перенял у них. Я очень рекомендую тем, кто хочет заняться разработкой под GMS посетить их каналы, поскольку там вы найдете довольно хороший материал для изучения.
В своих видео я рассмотрю следующие моменты:
— Ознакомление с интерфейсом и функционалом GameMaker Studio 2.
— Создание внутриигровых объектов (игрока, NPC, вещи и прочее).
— Создание уровней и переход между ними.
— Сохранение и загрузка игры в/из файла.
— Разработка графического интерфейса.
Очень надеюсь, что вам придутся по душе мои ролики и вы оставите свои комментарии, отзывы, а главное критику, поскольку я очень хочу улучшить качество своих уроков. При создании этих видео я понял основные ошибки, но исправить их у меня уже не хватило сил и времени. Даже если этот пост и видео потонут в минусах, то я всё равно продолжу свой курс, стараясь исправить всё то, что не понравится людям.
Благодарю за внимание!
Разработка игры своей мечты #1. Начало и ошибки геймдизайна
Кто-то мечтает создать свой шутер-Overwatch. Кто-то свою GTA. А мне всегда хотелось сделать платформер.
Началось всё с глубокого детства, ибо когда я уже играл в Денди, мне очень хотелось сделать что-то самому. Поэтому я обожал игры, в которых были какие-то редакторы уровней. Battle City, Excitebike, Lode Runner и тому подобные. Прошли годы, а подобное желание не угасло. Один из любимых жанров — это платформеры. В детстве, конечно же, я не знал такого названия жанра.
Ну а начал я всё в 2008, когда скачал Game Maker 6. Конструктор, который я юзаю до сих пор, и не так давно приобрёл GameMaker Studio 2. С тех пор он сильно продвинулся, но при этом остался всё таким же привычным.
Так вот, оставив позади кучку неудачно сделанных платформеров, я решил заняться продуманным и нормальным проектом.
Игра, над которой я сейчас работаю имеет NES-стилистику (кому непонятно — Dendy). Значит я стараюсь соблюдать цветовую гамму, но без фанатизма, дабы не ограничивать себя.
К слову, серьезным вопросом для меня стал выбор разрешения игры. Да, разрешение NES-игр — 256х224, а это менее половины ширины современных 16:9 экранов. И вроде как есть фанаты на такой ТРУ NES СТАЙЛ, но мне хочется, чтобы приятно играть было всем. Однако, когда я просто добавил ширины, геймплей сильно отошёл от NES-стиля, ведь врагов стало видно сильно издалека. Также от этого зависит респаун врагов, который также стал странно работать.
Поэтому я принял решение сделать игровой экран немного шире, но при этом урезать его в высоту. Итого получил разрешение 304х176.
В принципе, зачастую в NES-играх интерфейс занимал добрые 4 клетки 16х16, урезав который, получался почти нормальный такой широкий экран.
Когда делаешь не первый платформер, начинаешь также учитывать кучу ошибок, которые допускал раньше. Такие вещи как двойные прыжки, скольжение по стенам — это не просто прикольная фишка, делающая игру динамичнее. Это конкретно меняет геймплей.
Например, если в игре будет слишком много подобных фишек, то у игрока будет возможность перепрыгивать своих врагов и оставлять всё позади. При этом важно учитывать высоту экрана, дабы верхняя часть экрана не пустовала.
Чтобы вы понимали, о чём я покажу вам отрывок из своей игры трехлетней давности.
Верхняя половина экрана полностью пуста, а двойной прыжок и дэш (рывок) позволяют перепрыгивать всех врагов. Большая ошибка геймдизайна, которую исправить можно лишь полностью переделав игру. Как это исправить? Нужно было урезать разрешение игры где-то на треть, таким образом спрайты были бы крупнее, а вверху было намного меньше пустого экрана. А прыжки сделать гораздо слабее, с которым было бы затруднительно перепрыгнуть сразу нескольких врагов.
«Но зачем переделывать что-то старое, если можно сделать нечто абсолютно новое?» — подумал я. Лучше учесть подобные ошибки и идти дальше.
Оказывается, что недостаточно просто натыкать в уровень врагов, объекты и готово. Поэтому если раньше один уровень делался мною за недельку, то сейчас я уже больше месяца делаю лишь первый уровень. Надеюсь, я когда-то это закончу.
Если вам интересно следить за этим делом, то подписывайтесь на мой аккаунт. Также задавайте вопросы, будет классно пообщаться. Спасибо!
Пиксельная метроидвания (3) Туториал
Рисую пиксельный платформер с открытым миром.
В прошлых постах просили рассказать как и что я делаю.
В работе использую Procreate на планшете и фотошоп на компе.
Для пиксельарта есть и более удобные инструменты, но фотошоп мне привычнее.
В Procreate на планшете сделал себе документ с фоном под тетрадный листик.
Там, аки в тетрадке, корявыми школьными ручонками рисую карту уровней.
Важно помнить, на сколько клеточек в высоту и в стороны наш персонаж будет прыгать, чтоб представлять доступность любого места из любого места.
Можно, канеш, прямо в тетрадке и делать, но на планшете удобно редактировать (а редактировать и перерисовывать придется много) и легко экспортировать карту в фотошоп.
К тому же, валяясь в кровати перед сном рисовать в тетрадке малость затруднительно.
Потом, когда будет прототип, совершенно точно придется что-то править, но сейчас задача свести эти правки к минимуму.
Карта большая, но тут для примера только 1 экран.
Дальше, засовываю получившееся непотребство в фотошоп и рисую общую форму предметов. На этом этапе важно хорошо представлять что у нас будет за объект и стараться задавать его форму учитывая всякие мелочи вроде выступающих частей. У меня дерево сплетенное из лиан, соответственно, по краям должны эти лианы выпирать и всячески бугриться.
Дальше подключаю дополнительный цвет и прорисовываю форму отдельных лиан.
Теперь беру цвет светлее основного и набрасываю освещение, учитывая, с какой стороны оно расположено.
В моем случае освещение слева, поэтому стараюсь рисовать свет преимущественно с левой стороны лиан.
Опять же, важно представлять форму объектов в 3d и учитывать фактуру объекта.
Следующим шагом добавляем блики на самых светлых и выпуклых местах и добавляем еще один темный цвет, которым затемняем правую часть дерева.
Следующим шагом рисую крону. Один, более темный слой перед деревом, второй, светлый за ним.
Но я использую гиперболизированную воздушную перспективу, чтоб передать объем.
Воздушная перспектива это когда объекты с расстоянием становятся бледнее и менее контрастными, скрываясь в дымке или тумане.
Так вот у меня, можно сказать, охренительно сильный туман.
Ах да. В фотошопе у меня все разделено папочками по слоям, которые будут за персонажем и перед персонажем. Но в данном конкретном экране практически весь декор получился ЗА, так что я не буду на этом заострять внимание, но этот момент следует учитывать, чтоб не наделать себе потом лишней работы в виде разведения слоев.
А если в игре планируется паралакс, так тем более.
У меня, благо, на этот раз все статично.
Дальше снова добавляю освещение.
Часть крон у меня доступна для бегания по ним, поэтому постарался выделить светом места, где бегать можно.
Да, Помните же, что периодически стоит сверяться с картой? Она висит у меня полупрозрачной на верхнем слое и я ее по мере необходимости включаю для сверки.
Дерево получилось темноватым, поэтому я слегка его осветляю прозрачной заливкой светлого цвета (разбирающийся читатель из середины поста снова вскакивает и тычет в экран пальцем. Что же с ним будет, когда он узнает, что я еще и мягкими градиентами и add с оверлеями балуюсь.)
Дальше добавляю дополнительные платформы. На ветки по которым можно бегать накинул тряпочки для наглядности.
Ну и фон, чтоб не так пусто было.
Последним шагом будет впиливание освещения (да, да, градиентами и оверлеем) но это я буду делать позже.
Сейчас задача отрисовать декор для запланированного количества экранов, а дальше уж буду делать все остальное.
З.Ы. В этом проекте я решил практически отказаться от тайловой системы. У меня есть несколько спрайтиков, которые я использую и клонирую, но в дальнейшем, скорее всего, заменю и их.
Не делайте так, если не уверенны в себе на 100% и не имеете большого опыта в разработке.
С пятисотпроцентной вероятностью это приведет к тому, что нужно будет что-то существенно исправлять, а сделать это, когда игровой экран у вас это по сути тупо картинка будет ой как не просто.
Ну и вообще, данный опус следует расценивать как кривенький тутор по рисованию художественного недопиксельарта, а не по рисованию пиксельарта для геймдева.
Разработка 2D игры на Unity (5/5) «Сборка проекта»
А так же ссылка на исходники, расположенные на гуглодиске. По прежнему без кода.
Но, всё равно прошу у вас прощения за допущенную оплошность.
В этом посте я расскажу, как делается сборка проекта под ОС Windows. Задача эта неимоверно проста, поэтому букв тут будет не так много. Для начала, открываем меню File, выбираем пункт Build Settings, и в открывшемся окошке (в самом низу) ищем кнопочку Player
Settings. Нажимаем её, и нам откроется вот такой чудесный вид:
Здесь нам понадобится всего несколько пунктов:
В той же вкладке, но в пункте Stanalone Player Options, необходимо выбрать Disabled в пункте Display Resolution Dialog. Этот пункт позволяет отключить окошко, выводящее настройки управления в игре, перед запуском приложения.
Не забывайте ставить плюсы, чтобы поблагодарить автора. Это лучшая мотивация, чтобы сидеть ночью и писать. А так же подписывайтесь, чтобы не пропустить новые посты! 😉