Путь от идеи к игре / Хабрахабр. Я всегда затрудняюсь ответить на вопрос: откуда берутся идеи для игр? Но в этот раз, я более- менее точно могу сказать, что эта идея родилась у меня когда я увидел баннер «World of Tanks» на каком- то из сайтов. Знаете, бывают такие баннеры, которые привлекают внимание пользователя микро- играми, прежде чем перенаправить его на сайт рекламодателя?
Так вот, на этом баннере был танк, который по клику мог проезжать то или иное расстояние, зачем- то пробивая при этом кирпичные стены. Вот именно с этого момента я стал размышлять, по дороге на работу, о раннере с танковой тематикой. Тут же родилась и отсылка к нашумевшему хиту от Wargaming в названии. Она показалась мне забавной, учитывая, что суть моей игры — это движение по некой дороге, пути, с целью пройти максимальное расстояние. Под хабракатом вас ждет рассказ об игре, разработке, технические детали и все- все- все, что должно быть в классической «gamedev story». Об игре. Итак, что же у нас здесь имеется? Ну во- первых, у нас есть вот такой танчик: дыр- дыр- дыр.
Создание и разработка HTML5 баннеров в Минске: за 7 лет работы в студии Zink. World of Tanks / Баннер со сложными визуальными эффектами. Но в этот раз, я более-менее точно могу сказать, что эта идея родилась у меня когда я увидел баннер «World of Tanks» на каком-то из .
Который едет по дороге, виртуально разделенной на 3 полосы (привет, Subway Surfers!). Свайпом влево- вправо, можно перестраиваться в соседние полосы, чтобы избежать столкновений с препятствиями. В отличие от других раннеров, маневры здесь не мгновенные (это все- таки танк), что тоже нужно учитывать. Согласен, звучит странно, но наш танк умеет прыгать (свайп вверх).
Какой же раннер может быть без прыжков? К тому же это фаново, прыгать через яму- ловушку и в прыжке расстреливать противотанковые ежи, коварно расставленные сразу за ней.
Настройка и оформление каналов YouTube. Баннеры, шаблоны, шапки для канала ютуб, PSD макет. World of Tanks — это массовая многопользовательская онлайн-игра, полностью. 31.10.2017 в 18:52 Новые баннеры в оффере "World of Tanks".
Разумеется, танк умеет и стрелять (свайп вниз), правда снаряды в игре ограничены. На мой взгляд, стрельба — это аналог скейтов в том же Subway Surfers, она позволяет пройти «силой» тот участок, где нет времени на маневр. Одна из действительно коварных ловушек.
Вообще, я часто подсматривал в топовые раннеры, когда делал «Way of Tanks». Конечно, у меня нет многих из модных нынче фишек, типа рулетки, ежедневных соревнований, друзей из фейсбука, push- уведомлений и прочего- прочего, что должно наращивать ARPU, MAU, DAU и все вот эти вот не понятные мне штуки. Но, хочется верить, что в игре есть главное — это сделанный с душой геймплей! Впрочем, я отвлекся. Во- вторых, путь танка усеян препятствиями, расставленными невидимым противником. Все препятствия можно разделить на 2 типа: те, которые можно перепрыгнуть, они находятся на уровне земли и ниже (ямы- ловушки, минные поля) и те которые перепрыгнуть нельзя, а можно только объехать или уничтожить (стены, противотанковые ежи, доты).
Причем, просто уничтожать все на своем пути — не получится. Орудие танка имеет ограниченную скорость перезарядки, которая не позволяет стрелять слишком часто.
Поэтому, для успешной игры понадобятся не только реакция и везение, но и умение быстро принимать решение, когда маневрировать, а когда стрелять. Изначально, я задумывал добавить в игру несколько мини- боссов, но как обычно, жизнь и ограниченные ресурсы вносят свои коррективы. Поэтому из мини- боссов, в «Way of Tanks» пока есть самолет, который пытается уничтожить танк игрока, сбрасывая на него бомбы.
AI самолета устроен довольно просто, можно даже сказать, примитивно. Есть две основные характеристики: скорость принятия решений и время подготовки следующей бомбы к бомбометанию, проще говоря, «перезарядка». Так вот, когда бомба готова, бомбардировщик стремится занять одну полосу с игроком, а когда идет перезарядка, наоборот избежать нахождения на линии ответного огня. После тестов, я добавил пару усложнений: самолет фиксирует начало поворота танка и дальше алгоритм работает так, как если бы танк УЖЕ перестроился в новую полосу. Таким образом, бомбардировщик научился «предсказывать» ответные действия игрока и работать по цели с упреждением. Плюс постепенное улучшение характеристик для соблюдения баланса в игре (на максимальную сложность самолет выходит только с пятого- шестого захода). Как и в любом раннере, здесь есть временно действующие бонусы (powerups), придающие танку супер способности.
Я еще не до конца определился со списком, сейчас их четыре: Удваивает собираемые монеты «Рывок» — позволяет танку пробивать любые препятствия, но только в прыжке Увеличивает маневренность танка Бронебойные заряды — стреляя, танк уничтожает всю линию препятствий перед собой (а также +1 к зарядам)Ах да, еще была мысль сделать летящие навстречу ракеты, как в Jetpack Joyride. Но посовещавшись и подумав, решили, что ракеты либо будут лететь слишком быстро, либо будут странно смотреться (если их замедлить). В результате, ракеты превратились вот в такие броневики- камикадзе, которые будут таранить наш танк: В общем, игра получилась хоть и простой, но, тем не менее, органичной и азартной! По крайней мере, это единственная из всех моих игр, в которую я сам продолжаю играть с удовольствием после всех этих бесконечных тестирований и отладок. Техническая часть.
Это уже пятая игра, которую я делаю на And. Engine. Да, я знаю про Unity, но не гонюсь за кроссплатформенностью. По моему мнению, лучше быстрее и качественнее сделать эксклюзив для одной платформы. Да и игра на знакомом поле, так сказать, у меня более- менее получается, в отличии от попыток хоть как- то заявить о себе в App Store. Хотя я и посматриваю в последнее время на Lib.
GDX. Расскажу немного подробнее о внутреннем устройстве игры. Главное в раннере — это собственно, движение вперед.
Я пробовал подход с движением камеры вслед за персонажем и параллельной генерацией мира перед ней, но в силу различных причин, остановился на варианте со статичной камерой. То есть танк и камера стоят на месте, а весь игровой мир движется им на встречу, создавая иллюзию движения танка вперед. Вроде бы такой подход априори проигрывает по производительности, но если все делать правильно и оптимально, то проблем быть не должно. У нас есть четыре варианта бэкграунда, размером с камеру (1. Одновременно, игрок видит не более двух из них.
Поэтому, на первом шаге, мы устанавливаем Sprite. Group с бэкграундами в позицию (0, - CAMERA. Остальные два — скрываем. Далее, мы двигаем Sprite.
Group вниз со скоростью танка. Когда она оказывается в координатах (0, 0), мы возвращаем ее на изначальную позицию, при этом, случайным образом выбирая следующий участок бэкграунда и скрывая пройденный. Все просто! Но тут я столкнулся с неприятным багом: спрайты внутри Sprite. Group могут «мигать» при изменении позиции. На stackoverflow, я нашел вот такое решение этой проблемы.
Для Sprite. Group переопределяем on. Managed. Update и пишем: @Override. Managed. Update(float p. Seconds. Elapsed) .
Делать это полностью случайно, было бы не правильно, потому что в таком случае, возможно появление непроходимых участков. Все ловушки у меня тоже разделены на секции и подготовлены заранее. Парлазин Нео Капли Инструкция По Применению. Они хранятся в JSON- файле примерно такой структуры.
После этого, на каждом шаге генерации мира, мы просто выбираем новую случайную секцию с ловушками, либо выводим текущую строку текущего участка. Как и в любой современной Android- игре, у нас есть интеграция с Google Play Game Services (ачивки и лидерборды). Тут все довольно банально и подробно описано в руководстве на офф. Я просто использую один раз написанный код в каждой новой игре, практически без изменений.
Оптимизация. Хочу отдельно сказать несколько слов об оптимизации в And. Engine. Для всех объектов, которые не являются анимированными спрайтами, для которых мы не переопределяем on. Managed. Update и не используем entity modifiers, нужно не забывать устанавливать set. Ignore. Update(true) сразу при создании.