Приветы. / много гифок :: gamedev :: nests :: mgm.js :: InnerCat :: сделал сам (нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам) :: Игры :: гиф анимация (гифки - ПРИКОЛЬНЫЕ gif анимашки)

гифки gamedev Игры сделал сам много гифок InnerCat mgm.js nests 

Приветы. В общем пишу я тут игру. Точнее не игру, а небольшой движок для игр на js. Не то чтобы я большой погромист, чтобы таким заниматься, но вот занялся вот. Почти год уже его мучаю, допиливаю, отпиливаю, подумываю бросить, но всё делаю дальше. Ну а раз уж это именно движок для игр, то параллельно с ним надо конечно делать игры. На много игорь я не цезарь, но парочку вот калякаю. 

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

Про вторую игру собственно пост. Делаю ее тоже уже приличное время (относительно). Именно для проверки нагрузки на движок взял максимально паристый вариант стрелялки - плоская карта, много объектов. Оказалось что таки js для таких вариантов подходит оч не оч, по крайней мере в виде моего движка, и свыше 20-30 активных юнитов на поле, при моих мощностях старенького компа, оно уже не вытягивает без заметного падения фпс. Но по сути да и хрен с ним, для игры вполне можно обойтись таким количеством юнитов на поле. <s>или пиздовать на юнити</s>

(были и другие игры, но пока вообще не до них)

Про саму игру. Планируется ничего сверхкрутого, просто сносный пример простого 2.5D шутанчика. Лор: инопланегады сбили наш транспорт, надо спасти экипаж. Будет несколько уровней, где сложность постепенно растет. Конечно развивать можно что угодно и до бесконечности, но пока цели простые. Сейчас вариант тестовый, никаких уровней нет, можно просто ходить и стрелять собак, и отмечать гнезда с экипажем.

Для чего пост. Хочется, чтобы кто-то подписался тестить немного то что получается, кидать советы про ограбления караванов и т.п. Ну и вдруг кто-то найдется, кто сможет что-то полезного сказать по движку, обсудить там всякие методы и подходы, а то в одно лицо хоть и удобно, но есть и недостатки, глаза замыливаются, <s>хочется вдруг кричать заебало блять всё,</s> ну и в целом, я как выше сказал, таки любитель, и конечно еще есть куда расти.

Ссылка на тестовый варик игры: https://innercat.ru/nest/test.html

Ссылка на движок: https://github.com/jkn-code/MGM.js

Ссылка на дискорд: https://discord.gg/mzmgJqH6Vj там можно будет пообсуждать всякое, только там никого нет и он не настроен, это потом.

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


Подробнее



гиф анимация,гифки - ПРИКОЛЬНЫЕ gif анимашки,gamedev,Игры,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,много гифок,InnerCat,mgm.js,nests
Еще на тему
Развернуть
ты прогромист
luuke luuke 27.01.202321:08 ответить ссылка 2.3
Если надумал делать что-то вроде Vampire survival, то рекомендую озаботиться системой прокачки, подходящей под выбранный тобой сеттинг, далее иконки надо сделать, анимации и т.п.
AntoSh AntoSh 27.01.202321:16 ответить ссылка 0.4
Мне ее советовали для примера. Я такое количество юнитов не потяну тупо по мощностям, либо надо как-то прям сильно переделывать. Да и целей у меня нет таких. Хочется сделать просто что-то приемлемое с нужной атмосферой, где-то между чужими и первым квейком, в плоском виде. Чтобы делать такие прокачки (я смотрел видос про игру), это надо шарить в теме подобных игр сильно, а я не шарю.
iNji iNji 27.01.202321:22 ответить ссылка -0.4
Думаю можно выжать больше фпс. Я бегло пробежался по коду, признаюсь не вчитывался, и на вскидку заметил несколько мест для быстрой оптимизации.
Например в цикле отрисовки заменить проверку и присвоение флагов на переход к следующему элементу if (not ok) continue; и скипнуть все проверки ниже которые уже заведомо не if (ok).
Сделать отдельный режим отрисовки по целым пикселям для производительности и второй с дробными для качества. Я помню когда писал игру на js сглаживание для дробных пикселей пожирало производительность.
Надо проштудировать MDN на тему оптимизации, думаю там должны быть какие-нибудь перформанс типс.
Если рисовать по целым пикселям, то изображение плывет. По крайней мере в этой игре. Ты двигаешься по карте, а некоторые картинки покачиваются, это прям очень видно. Можешь в игре открыть класс, там не гитхабоский, с комментами, там есть заремленный кусок с округленным выводом. Оставил его потом поковыряться, может подойдет к пиксельному режиму канваса, но руки еще не дошли.

По ок/не ок с флагами, это вроде не самое тяжкое место (если я правильно тебя понял). Проверки я так понял из ковыряний и тестов много не жрут, чуть больше жрут операции математики всякой (лучше проверить и сложить, чем сложить и проверить), но уж что жрет, так это циклы в циклах, там я как смог урезал. Это не исключает конечно, что при создании игры можно вешать на каждый хрен проверки на касание со всем сраным миром в каждый кадр. Но такая проблема уже везде, я думаю, не только тут.
iNji iNji 27.01.202322:47 ответить ссылка 0.1
Ну в целом верно. Еще кое что заметил - условия если есть какое то свойство. ЕМНИП что бы найти проперти js движок каждый раз шерстит всю цепочку наследования прототипа до object, что очень дорого если каждый кадр так делать.

Если объекты не часто меняются я бы распихал их по отдельным коллекциям и сделал бы для итерации по каждой коллекции свой метод. Отдельная коллекция для объектов с update, отдельная для anim и т.д. Но таким путем можно прийти к переписыванию всего под ECS архитектуру, это опасная дорожка))
Ты мужик! Что бы браться за движок надо иметь стержень, ствол, нефри... простите понесло. В общем я считаю это очень круто)

По движкам ничего не скажу, чукча – не читатель, чукча – писатель, но вот что точно я бы сделал, так это разбил проект на отдельные классы (простите джаваскриптизеры, на прототипы/модули). Потом если нужно все можно склеить при помощи webpack обратно в один файл. Будет в разы проще вести разработку.

Сейчас проект сложно читать потому что все в одном файле, и жизненный цикл, и загрузка ресурсов.
nohonor nohonor 27.01.202321:54 ответить ссылка 8.6
Посибо. Можно стержень, но можно быть долбоё.., ну в общем мотивации разные бывают да. В начале просто хотелось при очередных попытках написать что-то игрушечное на js, не страдать каждый раз с настройками канваса, массивами объектиков и т.д. Ну а потом слово за слово, там это добавить охота, тут то...
На какие-то отдельные части разбить бы надо конечно. В будующем обязательно.
iNji iNji 27.01.202322:10 ответить ссылка 0.2
если будет нужен звук в игру или озвучка - обращайся :)
Звук нужен. Для меня вообще больная тема. Хороший звук люблю, а сделать его не могу. Ну либо это уйма времени прям. У тебя платно? Черкани в дискорд если что.
iNji iNji 28.01.202303:31 ответить ссылка 0.0
понатыкать хрущёвок и будет чисто россия
Офигенно! Твои труды вдохновляют!
Игровая картинка своей атмосферой сильно напоминает постъядерные пустоши. Камни, сухие деревья и пепел летающий в воздухе. Хотя может по этим гадам уже били чем-то ядреным
Признаться честно, я понятия не имею зачем в 2023 году писать свой движок, но всё равно снимаю перед твоим упорством шляпу! Это отличный челлендж и хорошая прокачка скиллов как миниум. А, может, и начало для отличного проекта. Держу за тебя кулаки, друг!
vfrgy19 vfrgy19 28.01.202303:14 ответить ссылка 1.8
Спасибо. Ну в принципе это и было сначала что-то типа челенджа, был набор идей и ощущение, что вроде смогу что-то изобразить. Просто все это как водится начало разрастаться и затягиваться.
Ну и по отношению к другим движкам, мне не понравилось что все они весьма заморочены, и хотелось сделать что-то по возможности предельно простое.
iNji iNji 28.01.202303:28 ответить ссылка 0.0
Так, ну я не погромист, но аркадщик очень даже заядлый (в своё время в кримсонленде с друзьями зависали часами), так что мои советы будут чисто гейплейными.
Что отметил для себя:
Отлично:
1. Гнезда хорошо выделяются, их легко отличать от остального ландшафта как визуально, так и геймплейно
2. Мобы быстрые, их много и заставляют отходить от гнезд, что играет на руку напряжению
3. Цветовая гамма бедная, но при этом хотя бы геймплейно обоснованая, все просто и хорошо работает с точки зрения восприятия игрока.
4. Спидбуст работает отлично, но, возможно, стоит потестить возможность проходить им сквозь коллизии, даст дополнительную маневренность игроку
Сомнительно:
За что хвалил, как грится. Цветовая гамма настолько бедная, что после двух-трех ранов все сливается в серую массу и ты перестаешь обращать какое-либо внимание на окружение, кроме геймплейных объектов (кровь, гнезда, и т.п.)
2. Не уверен, хорошо ли оставлять таймер захвата точки после того, как игрок отойдет, не завершив его. На мой взгляд, он должен сбрасываться, иначе теряется динамика и внутреннее ощущение прогрессии, но, мб, это чисто мои загоны
Плохо:
1. Гранаты. Их неудобно бросать, их индикатор работает странно, сложно попасть в группу врагов, если не приноровиться, хотя, по идее, геймплейно они должны быть в крайне ограниченном количестве и быть максимально удобными, так как это - способ засейвиться от наступающей волны.
2. Мобы. Застревают постоянно в текстурах, нет никакого импакта по ним, если попадаешь (даже звука), нет поощряющей механики (вроде станлока или замедления, или даже заметного звука смерти), порой игрок может быть не уверен, попадает ли он вообще. В иных толпах (я попытался побегать по гнездам и собрать побольше мобов), вообще непонятно, что происходит, мобы сливаются в сплошную тень, кек.

В общем, делай ищщо. Если понадобится лор, сюжет, текст, смело обращайся, денег не возьму)
О, в догонку. Тут советовали обратить внимание на прокачку в VampireSurvival, а я посоветую обратиться к прокачке в Crimsonland, кмк, она, конечно, построена на драйве игры, но при этом она очень аддиктивная из-за рандома, тогда как VS предлагает просто прирост циферок и дополнительных анимаций атаки.
Спасибо.
По цветам да, хотелось сделать мрачное, но что бы не была тупо чб картинка, накатил цветной кровяки. Смотрится странно, сам пока не понял как отношусь, но это лучшее что смог изобразить по визуалу пока.
iNji iNji 28.01.202303:43 ответить ссылка 0.1
Спасибо за игру! Будем ждать новых уровней. Удачи в разработке движка!
Ba14966 Ba14966 28.01.202315:39 ответить ссылка 0.7
Большоевое спасибо!
За тест и фидбек, и за спасение экипажа)
iNji iNji 28.01.202316:29 ответить ссылка 0.0
Ты огромный молодец, за то что высидел и осили написать такое большое количество кода,
и намутить свою игру.

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

- Какой-нибудь сборщик - чаще всего на слуху webpack - но для небольшого проекта я бы посоветовал, например, Vite - он попроще в настройке, и в нем многие вещи есть 'из коробки', как поддержка SCSS модулей например и много другое

И больше внимания уделить архитектуре кода - разбить твой монолит на более атомарные структуры - по классам / модулям и так далее - поддержка файла в 2000 строк - это ад

В целом - если у тебя нет конкретной цели - а как у самурая - есть только путь - то можно фигачить и так

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

Дальше можно было бы прикрутить react например для упрощения работы с DOM, прикрутить eslint, prettify для единого стиля кода, покрыть это тестами в jest и так далее

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

PS: ну и комменты к коммитам лучше писать осмысленные и на аглицком, вместо 'Туц туц' =)
Мне нравится js во многом за отсутствие строгой типизации. Для крупных проектов, когда еще и много людей в работе, строгая типизация очень важна, и я понимаю существование ts, но мне нравится именно фановое использование. Я разве что в какой-то момент погладывал на ts, чтобы появились подсказки в коде для методов. Но потом понял чего мне это будет стоить, и забил.

Смысл сборщика пока не улавливаю, чел выше тоже упоминал. Как и разбиение класса на файлы. Чтобы потом собирать их обратно сборщиком. Я понимаю смысл, но мне оно походу не надо. Одна из целей движка, это именно простота, что включает т что это тупо один файл, ты скачал его, создал html-ку и вот у тебя уже что-то шевелится на экране и можно писать игру. Не надо ничего инсталировать, настраивать, билдить и т.д. Я понимаю, программистов с этого прет, но мне нужна тут простота на уровне полных новичков.

Поддержка файла на 2000 строк не особо и проблема. Навешал закладок, юзаешь. К тому же прям в редакторе есть дерево методов, можно открывать один док в нескольких окнах. Я пробовал раньше разбивать другие проекты. Честно, разницы я не чувствую. Может когда пишешь не один, то это играет большую роль, но мне не доводилось. А разбить основной класс на несколько классов я планирую попробовать, тут согласен на счет читаемости, стоило бы да. Но потом когданить.

Цель была, но она как-то затянулась и превратилась в путь да))

Какие преимущества даст react? Вроде и так с js все можно, куда хочешь обратился, что хочешь накрутил, ну jq добавил если прям хочется. Не шарю за react, скорее слышу шутки, что он любит грузить тонны ненужного хлама, чтобы сделать простое действие. Мне вот как раз именно этого совсем не нужно.

С терпением и усидчивостью как раз проблемы) К тому же и так нормально времени потратил на ковыряния с unity. Но это конечно опыт, в итоге если можно так сказать, пытаюсь изобразить что-то среднее между unity и scratch.

'Туц туц' вапщета это 'new new' в русской раскладке)) Так что вот. Но да, с инглишем есть серьезные сложности у меня. Немалые сложности у меня вызывало придумывание названий для некоторых методов, и до сих пор остались сомнения насколько это адекватно. Просто надо еще и оч коротко записать, меня просто выводят из себя названия методов, которые делают из более двух слов, еще и без сокращений.

Большое спасибо за развернутый фидбек, мне такое важно ❤.
iNji iNji 29.01.202309:13 ответить ссылка 0.0
Ну смотри. Я твой поинт понял, и ничего против не имею - в своих проектах каждый пишет как хочет

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

Смысл сборщика - не потому что нас 'прет' а потому что это необходимость. Сборщик - это builder который собирает весь твой код, и компилирует его в финальный файл / файлы. При этом происходит процесс минимизации / обфускации кода, + он может быть прогнан через транспайлеры которые делают твой код доступным на старых устройствах / браузерах, конвертирует TS в JS, SCSS в CSS и многое другое

React или Vue или Angular позволят упростить / оптимизировать работу с DOM - базово он берет на себя рендер HTML, навешивание обработчиков, управление состоянием, например - если брать только React, без дополнительных пакетов. Сам по себе React не грузит тонны штук - если что-то такое и происходит - это косяк разработчика.

Почему нужно разбивать проект на модули - потому что, как я уже написал - читать и поддерживать монолит очень сложно, и чем больше он будет разрастаться - тем будет хуже. В целом - если тебе норм - то ок. А если ты планируешь чтобы твой код читали и использовали другие программисты - подумай как твой код выглядит для них со стороны. Легко ли его читать, легко ли его понять человеку который видит это все в первый раз?

LOL, я бы по рукам линейкой лупил разработчиков которые стремятся все сократить - названия переменных, методов, компонентов и так далее. На ревью такое не пройдет.
В этом нет смысла - финальный код все равно будет (должен быть) обфусцирован сборщиком, а вот читаемость кода падает заметно + приходится больше тратить времени на то чтобы вникнуть в саму суть кода

Суммарно - если ты пишешь все сам и для себя - то делай как хочется (не сарказм)
Спасибо еще раз, приятно и полезно обсудить (особенно когда без хамства и демотиваций в духе - ой да не взлетит забей).

В целом да, пишу во многом для себя и под себя, но таки не только. И вот по именам методов как раз есть нацеливание, но не как ты считаешь, на программистов (они и в юнити напишут), а скорее наоборот, на ламеров, а то и вовсе детей. У тебя надеюсь пукан не взрывается каждый раз когда ты видишь/пишешь тег ссылки просто буквой "a", а не anchor, как по идее должно быть. И там в html такого навалом, и я рад этому (хотя одна буква, это конечно перебор). Всегда можно загуглить и прочитать/вспомнить что делает штука с таким именем. И если ты ее часто пишешь, и ее визуально много в твоем коде, то хорошо, что она будет называться типа setGR(), а не setGlobalRandomNumberFromMyFantasyInNow(). Но и да, код должен быть читаем без комментариев, это я тоже полностью соглы, и по мере сил стараюсь, чтобы так было. Пытаюсь между тем и тем соблюдать какой-то баланс. Ну или что-то такое)
iNji iNji 30.01.202300:54 ответить ссылка 0.6
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты