Статьи

Игры на JavaScript и HTML5: от Angry Birds до ZX Spectrum

В последнее время в игровой сфере HTML5 / JavaScript произошел небольшой взрыв. Популярность браузерных игр растет, и разработчики начинают находить в своем распоряжении набор удобных API и других инструментов. Роб Хокс стремится похвалить HTML5 и JavaScript и их применение в браузерных играх. Роб — визуальный программист, автор и технический евангелист в Mozilla, возглавляющий игровую сторону работы Mozilla в сообществе разработчиков. Он выступил с заключительным докладом на веб-сайте Code Directions Code , который состоялся в Мельбурне еще в мае, и показал всем нам, как быстро развиваются классные игры на HTML5 и JavaScript.

Привет Роб. Расскажите нам о своем опыте разработки.

Я работаю в сети около 13 лет. Я узнал кое-что о HTML и CSS — я больше интересовался веб-дизайном, но затем перешел на PHP, когда узнал, что вы можете делать довольно мощные вещи в разработке на стороне сервера. Когда-то я знал, как создать форму, я думал, теперь, как вы получите доступ к этим данным?

Каждый начинает изучать PHP с форм …

Правильно! Было действительно круто иметь возможность отправлять данные во что-то. Тогда я пошел работать в индустрию, занимаясь в основном разработкой внешнего интерфейса в течение нескольких лет. Я заинтересовался средствами массовой информации и довольно увлекся JavaScript, и оттуда я понял, что я не настолько заинтересован в создании сайтов, а скорее в изучении технологии и расширении ее возможностей. Я всегда был очень заинтересован в производстве игр и в том, чтобы что-то делать и сводить с ума что-то с этим, просто чтобы узнать, как это работает, поэтому, пока я учился в университете, я много занимался с HTML5 — особенно canvas

Вы, должно быть, копались с canvas

На самом деле, canvas Apple создала свои виджеты на приборной панели. Он всегда был в WebKit, хотя в других браузерах он никогда не стабилизировался — или, по крайней мере, он никогда не был интересным. Никто действительно не сделал с этим много. Но когда я наткнулся на canvas Я вошел в хороший момент — там действительно не было никаких книг, но были возможности, которые возникли с этим. Я был одним из немногих людей, которые копались с ним. Кроме того, я начал экспериментировать с API JavaScript.

Я вижу себя не дизайнером и не разработчиком — где-то посередине. Мне нравится визуальное программирование. Такие вещи, как производство игр и canvas Это мой фокус на Mozilla; сторона разработки игр в Интернете — это и Boot2Gecko , который является проектом для мобильных устройств, над которым мы работаем.

Так что же заинтересовало вас в играх на HTML5 / JavaScript? Вы большой геймер?

В моей жизни всегда были игры — у меня был ZX Spectrum, приставки…

Вот это да! Вы фанат ZX Spectrum?

Мой папа не увлекался компьютерами, но по какой-то причине он подумал, что это хорошая идея — купить ее. И я был просто очарован идеей вставить кассету, и эта игра появилась! Я имею в виду, я был очень молод, но я все еще помню это — Утиная охота и все эти безумные игры. Потом, когда я начал играть в компьютерные игры, это был конец моей продуктивности на очень долгое время! Но игры всегда были для меня очень интересными. Такие технологии, как Flash и JavaScript, заставили меня понять, круто, я могу сделать игру сейчас. А потом, как только вы начинаете создавать игры, это открывает новые возможности. Это как чувство, которое я испытал, когда впервые сделал сайт — я создал это! Вы можете изучить очень много различных технологий в разработке игр — ввод, визуальную графику, звук — и вы не всегда получаете такой опыт, когда создаете стандартный веб-сайт. В играх вы всегда ставите все на свои места.

Так что, если бы я заинтересовался разработкой игр на HTML5 / JavaScript, чему бы я мог научиться в первую очередь и куда мне направиться?

Справиться с JavaScript; стандартный материал, связанный с языком. Но затем, как только вы освоитесь с JavaScript, взгляните на некоторые графические API-интерфейсы, такие как Canvas API. Canvas — это такой хороший API. До того, как я наткнулся на это, я действительно не знал, как можно рисовать вещи в браузере без создания изображений. Также взгляните на Audio API. Мультимедийные функции в HTML5 действительно интересны.

Взгляните на некоторые игровые движки. Возможно, вам не обязательно изучать их с нуля, но есть целая куча игровых движков, которые позволяют вам начать работу без полного понимания основ. Такие вещи, как Crafty , который, я считаю, является австралийским двигателем, и он бесплатный. А еще есть действительно хороший вариант за $ 99, и он называется Impact — фантастический игровой движок, который действительно хорошо документирован. Если вы хотите создать игру с JavaScript, но у вас нет необходимости слишком увлекаться реализацией, эти движки — действительно хороший способ начать.

Если вы действительно хотите вникнуть в суть разработки игр, узнайте, как создавать анимации с помощью таких инструментов, как requestAnimationFrame Когда вы комбинируете это с Canvas API и, скажем, перемещаете блок по экрану, переход от клавиатуры к вводу оттуда невелик. Оттуда до вас, где вы хотите взять его.

Похоже, вам все еще нужно хорошее понимание базового JavaScript.

Правильно. Я имею в виду, есть библиотеки jQuery-esque — движки вроде Crafty и Impact немного похожи. Но они не такие абстрактные, как jQuery . Если вы хотите сделать что-то более сложное, вам все равно нужно написать JavaScript. Но если вы просто хотите сделать базовую анимацию — например, ввести изображение в виде спрайта и переместить его — вы можете сделать это с помощью Crafty. Проблема в том, что вы не до конца понимаете, что происходит за кулисами. Вне сети, если вы хотите создать игру, вы можете использовать Flash или Unity , просто потому, что она абстрагируется от сложных анимаций и физики.

Однако для меня знание JavaScript означает, что я могу создать игру с нуля. И да, это может быть сложно, и это может занять некоторое время, но оно того стоит в долгосрочной перспективе. Если вы хотя бы сможете понять основы этого — для циклов, массивов и объектов и тому подобного — тогда вы по-настоящему оцените это, когда захотите продвинуться немного дальше.

HTML5 и JavaScript, похоже, спровоцировали взрыв в ретро-играх — стратегические игры, платформеры и воскрешение старых игр, таких как Pong . Видите ли вы его куда-то еще, в более сложных, интерактивных проектах?

Ретро-игра довольно крутая. HTML5-игры находятся на довольно простой стадии, поэтому ретро-игры идеальны — им не нужно слишком много энергии, они в основном в 2D и их довольно легко создавать. То же самое было, когда Flash-игры были большими. Нет ничего, что мешало бы разработчикам использовать JavaScript для создания более захватывающего игрового процесса. Мы начинаем видеть это с WebGL. Многие люди начинают создавать игры, более похожие на те, что вы видели бы на iOS, даже на 3D-игры, используя технологии, такие как аппаратное ускорение.

Понг великолепен, но он не сильно продвигает технологию; даже Angry Birds не слишком стараются. Я видел людей, создающих Quake 4 в WebGL, и он работает без сбоев. Нам нужно увидеть больше таких игр, чтобы помочь легитимизировать Интернет как платформу для современных игр. У нас есть технология и возможность создавать правильные игры. И под правильными играми я имею в виду то, что вы увидите с названиями ПК.

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

В настоящее время игры в Интернете на самом деле просто копируют другие платформы — игры довольно статичны, и на самом деле они не используют ничего, что предоставляет сеть, например, социальные функции или возможность подключения к другим API. Все это присуще Интернету, и мы используем его на веб-сайтах, но что будет, если мы используем его в играх?

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

Это было бы моей мечтой. Сейчас я думаю, что мы несправедливы по отношению к HTML и Интернету как игровой платформе. Мы сравниваем это с предыдущими платформами; так, например, мы портируем игры с iOS — у нас Angry Birds работает в Интернете в HTML, но он никогда не создавался для этого. Мы принесли это, потому что это было успешно. Это нечестно; мы сравниваем веб-платформу с нативной платформой, для которой она была создана. И, конечно, родной лучше — он был создан для сенсорного управления, а также для определенного языка программирования и технологии.

Мы никогда не позволим Интернету процветать самостоятельно, ограничивая его тем, что мы делали ранее. Мы можем раскрыть всю мощь Интернета и попробовать что-то, что не так ограничено, как игры, в которые мы обычно играем, — где, например, мы видим игры, содержащиеся в небольшой рамке в браузере. Нет причин, по которым игра должна быть в маленькой коробке как часть веб-сайта — она ​​может быть частью веб-сайта; Вы могли бы преследовать игру по сети. Нет причин, по которым ты не мог бы играть в игру через Твиттер.

Я надеюсь, что мы увидим взрыв новых игр, поскольку люди с теплотой относятся к идее игр в Интернете. JavaScript API созданы для Интернета. Это очень базовая технология; установите соединение через веб-сокет и пару событий, и вы сможете отправлять и получать сообщения на веб-сервер в режиме реального времени — от этого не так уж и много до создания многопользовательской игры.

Как вы делаете эти идеи конкурентоспособными?

Это то, что мы пытаемся решить в Мозилле. И это один из вопросов, которые мы получаем от разработчиков игр в целом: «Звучит великолепно, но что, если я не хочу отдавать свою игру бесплатно?» Люди привыкли к DRM и защите кода и приходят к Интернет и все это открыто; исходный код все там. Таким образом, у нас есть две проблемы для решения здесь. Один: как мы можем убедить людей, что открытая технология — это хорошая идея? Я думаю, что эту проблему легко решить, потому что, если вы беспокоитесь о краже вашей игры, то я не думаю, что Интернет подходит именно вам. То, что вы можете создать игру на HTML, не означает, что это лучшая платформа для вашей игры. И есть способы облегчить эти вещи, скажем, минимизируя код — методы, которые могут помочь разработчикам чувствовать себя немного более комфортно в выпуске кода, над которым они потратили много часов.

Второй вопрос — маркетинг: как вы продаете свои игры? Если вы не можете зарабатывать на жизнь, то нет смысла делать игру, по крайней мере, как компанию. И вы могли бы пойти по пути, где вы не слишком беспокоитесь о том, чтобы не дать людям войти в вашу игру, если они не платят, но вы работаете над моделью пожертвований. С другой стороны, если вы хотите заблокировать людей, если они не платят за игру, вы можете сделать это. Мы работаем над открытыми API-интерфейсами веб-приложений в Mozilla, которые позволяют вам предоставить квитанцию, которая должна быть проверена на сервере разработчика игры. Мы ищем способы принять открытость кода и не мешать людям смотреть на исходный код, а просто создать точку, где вы можете сказать, заплатили ли вы за эту игру? Если нет, то вы не получите полный опыт.

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

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

И это Интернет, поэтому вам не нужно продавать игры, как вы это делали ранее. Возможно, вы сможете зарабатывать деньги на внутриигровых платежах, так что у вас все еще может быть этот бесплатный игровой опыт, но вы можете контролировать, какие вещи люди испытывают в игре — какого уровня игрок достигает, какую броню или усиления он имеет. Как только мы полностью поймем, что возможно, мы разберемся, как монетизировать это, особенно сейчас, когда у нас есть такие крупные игроки, как EA, — если кто-то знает, как зарабатывать деньги, это те парни. И я думаю, что после этого инди-разработчики последуют их примеру. Это не так просто, как, скажем, на iOS … но у них был огромный старт. Есть способы в Интернете. Газеты начали смотреть на введение платных сетей …

Которые не обязательно работают.

И это вещь, вы должны блокировать контент? Разве это не идет вразрез с тем, что такое сеть? Есть ли другие способы заработать деньги, которые лучше подходят для Интернета? Может быть, это ответ на вопрос — не «как я могу помешать людям играть в мою игру, если они не платят?», Но «как я могу заработать на этой игре, используя то, что хорошо в сети?» даже не получая деньги от игроков, но от спонсоров. Мне было бы интересно увидеть, где мы находимся через год. Мы можем увидеть успешную игру, которая приносит много денег.