Интерактивная Онлайн-Игра С Использованием Html, Css И Javascript.

Однажды после игры в офисе шестигранник , родилась идея написать игрушку по схожим мотивам.

В моей нынешней сфере деятельности я веб-разработчик и поэтому хотел, чтобы в игре использовались только HTML, JavaScript и CSS — инструменты, знакомые каждому веб-разработчику.

Никакой вам вспышки или даже холста.

Звучит хардкорно, но на самом деле сейчас HTML + CSS3 — это очень мощные и гибкие инструменты визуализации, а писать игровой код на JavaScript — одно удовольствие.

Кроме того, мне хотелось, чтобы игра была онлайн-мультиплеерной, причем интерактивной - никаких шашек, карточных игр, пошаговых стратегий, все должно быть в действии и движении.

Вот что у нас получилось: В статье я оставлю набор заметок, возникших при написании прототипа игрушки, направленных больше на подход «как сделать проще и быстрее».

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



Геймплей

Цель игры — вырастить свою колонию жуков и уничтожить все вражеские отряды.

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

Бонусы в игре: торт - дает 5xp, когда вы получаете 15xp, жук умножается яблоко - восстанавливает 50 хп, если жук полностью здоров добавляет 15 хп дополнительно перец - увеличивает атаку на 5дм желудь - дает 2xp и бросается в ближайшего врага, нанося тройной урон при попадании мухомор - дает 1xp и позволяет произвести ядовитый выстрел, при попадании наносит 1/2 урона и замедляет жертву В игре могут играть от 2 до 4 человек.

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

Вы можете попробовать сыграть Здесь .

Источники на github .

Архив с игрой .



Графика

HTML и CSS, конечно, не очень быстры с точки зрения производительности, когда дело доходит до рендеринга графики, необходимой в интерактивных играх.

Но если наша цель — написать прототип игрушки, то этот вариант вполне подойдет. В конечном итоге «узкие места» в виде рендеринга основной игровой сцены потом можно будет быстро перенести на холст. Для работы с графикой в 2D-игре нам потребуются операции перемещения, вращения и масштабирования спрайтов.

Переместите спрайт, установив его положение: абсолютное и изменив его влево и вверх.



Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

Для вращения спрайтов мы будем использовать трансформировать: вращать .

И с помощью преобразование: происхождение вы можете установить ось вращения (по умолчанию она находится в центре спрайта).



Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

Для масштабирования мы изменяем размер спрайта, используя свойства ширины и высоты, прежде чем установить соответствующее значение в фоновом размере:

Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.



Аппаратное ускорение

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

Для этого вам нужно работать со спрайтами как с 3D-объектами.

Теперь давайте выполним операции перемещения, вращения и масштабирования, используя Translate3d, Rotate3d и Scale3d:

Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.



Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.



Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

Всех этих операций было вполне достаточно, чтобы собрать графику в игре из нескольких спрайтов, нарисованных в Paint.

Физика

Помимо рендеринга игровых объектов, вам также необходимо наладить их взаимодействие друг с другом.

В bugsarena все взаимодействие сводится к обработке столкновений спрайтов.

Поскольку мы планируем сделать все максимально просто, то ограничимся школьной математикой.

Вероятно, одна из самых распространенных математических операций в играх — это нахождение расстояния между двумя точками.

По сути задача сводится к нахождению гипотенузы в треугольнике:

Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

Получаем формулу:

Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

Теперь, благодаря этой простой формуле, вы можете выполнять множество операций, таких как определение расстояния до объекта, поиск самого близкого и самого дальнего объекта, поиск объектов в пределах заданного радиуса, а также обнаружение столкновения объектов в форме круга.

.

Все игровые объекты нарисованы в довольно маленькие спрайты размером 20х20, их формой можно пренебречь и рассчитывать столкновения так, как будто все они вписаны в круг диаметром 20. Тогда можно сказать, что 2 объекта столкнулись, когда расстояние между их центрами меньше или равно сумме их радиусов.



Интерактивная онлайн-игра с использованием HTML, CSS и JavaScript.

И еще несколько замечаний:

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

    Все угловые значения из Math возвращаются именно в них.

    Напомню, что полный оборот равен 2*ПИ радиан.

  • Используйте понятие вектора для определения величин, имеющих направление.

    Даже положение спрайтов можно описать вектором.

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

    Например, вектор определяет скорость объектов, поскольку у него есть величина и направление.

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

  • Если игра требует сложной физики, то можно отвести взгляд box2d-js .

    Эта библиотека позволит вам создать игровой мир с объектами различной формы, гравитации, массы, инерции, силы трения и других преимуществ ньютоновской физики.

Пример класса Vector Теги: #JavaScript #bugsarena #онлайн-игра на javascript #мультиплеер #gamedev #JavaScript #Разработка игр #HTML
Вместе с данным постом часто просматривают: