интерфейс в танках что это
GUI в игре World of Tanks. Часть первая: эволюция интерфейсов игры
Сегодня мы проведем экскурс в историю развития Graphical User Interface (GUI) в игре World of Tanks.
Игра прошла длинный путь к успеху, и ее GUI менялся и полностью переделывался несколько раз в погоне за повышающимися требованиями армии танкистов, которая неуклонно росла.
Проработав в отделе GUI Programming два с половиной года, я получил представление о том, как развивался сам интерфейс в технологическом плане и как менялись подходы и процессы, это развитие сопровождавшие.
Первые шаги: использование инструментов BigWorld
Начиналось все с того, что в декабре 2008 родилась идея проекта. Все, кто играл в танки, думаю, знают, что первоначальной идеей было сделать игру про эльфов и орков, но, когда хорошенько все продумали, решили остановиться на танках (см. заглавное фото).
Игру начали делать на движке BigWorld, который предоставлял собственный набор инструментов для создания GUI. Мы пошли по пути наименьшего сопротивления и делали первые интерфейсы именно на BigWorld GUI.
Как это работало с точки зрения технической реализации:
hangar.xml — описание блоков UI в ангаре:
account.xml — описание блока с информацией об аккаунте:
styles/common.xml — описание стилей для общих компонентов:
styles/hangar.xml — описание стилей для компонентов в ангаре:
Вроде бы все очень структурировано и понятно. Но, как оказалось, у такого подхода было несколько минусов:
Одна из первых версий боевого интерфейса:
И чуть более поздняя его версия:
Очень быстро стало понятно, что такой подход — тупиковый. Был проведен анализ рынка middleware-решений. Как оказалось, мейнстримом в разработке GUI на тот момент было решение от Scaleform: практически все AAA-проекты использовали его в разработке, и результаты выглядели очень привлекательно.
Предрелизный период: переход на Scaleform
Scaleform предлагал использовать Flash для разработки GUI. По сути, решение состояло из трех частей:
По этой причине в срочном порядке учить Flash начал весь отдел GUI (до этого они делали php, Java и занимались веб-разработкой). Учились и начинали работу на ActionScript 2, так как Scaleform на тот момент еще не поддерживал ActionScript 3. Вот что получалось на первых порах:
За полгода весь интерфейс ангара был переделан на Flash. Как я уже писал, pipeline разработки на Flash — отработанный и логичный процесс. Дизайнеры создают эскизы, и программисты воплощают их в игре.
Весной 2010-го пришел и его черед переходить на Scaleform. Когда это произошло, игровое сообщество разделилось на два лагеря. Одним все нравилось (или они просто не заметили большой разницы) — и они молча продолжали бодро рубиться в танки. Остальные же начали откладывать горы кирпичей в адрес «кровавой картошки», говоря о том, что новые прицелы и элементы интерфейса не соответствуют сеттингу, что не хватает рваного металла, болтов и заклепок, что прицелы должны быть историчными, а не похожими на элементы управления космическим кораблем.
Один из рабочих эскизов нового боевого интерфейса:
Реализация боевого интерфейса на Scaleform:
Но со временем недовольство прошло, так как новые интерфейсы привнесли много нового в геймплей. Игра стала динамичнее, интуитивно понятнее и информативнее.
Помимо этого, использование Scaleform открыло возможности по кастомизации интерфейсов. Любой школьник, умеющий минимально работать с Flash, мог декомпилировать SWF из дистрибутива игры и на свое усмотрение менять все — от используемых изображений и шрифтов, до логики работы кода. Появились моды, заменявшие прицелы на историчные, «куклу» танка на более брутальную или, наоборот, минималистичную. Можно было найти моды для любой части интерфейса в бою. Были моды и для ангара: часы, калькуляторы, многоуровневая карусель и т. д.
Руководство Wargaming несколько раз меняло свое отношение к модам. Сначала, поскольку это были единичные случаи, их просто игнорировали. Со временем и увеличением их числа и популярности — начали присматриваться и поняли, что некоторые из модов могут дать игровое преимущество использующему их игроку. Разработку стали вести по принципу «клиент в руках врага». Это, конечно, не значит, что игроки — наши враги. Нашей задачей стало максимально обезопасить игроков от чужих попыток получить игровое преимущество.
Ситуация на рынке модов стала тщательно мониториться. Теперь в случае обнаружения опасных или изменяющих игровой баланс модов мы оперативно реагируем и закрываем возможность их использования, меняя логику работы клиента. В последнее несколько лет изготовление честных модов поддерживается. По сути, это user generated content — игроки делают эти моды для себя и других игроков, что повышает ценность нашего продукта.
Но вернемся к истории. Работа со Scaleform очень освежила GUI и дала толчок к его развитию в проекте. Функционал разрастался и усложнялся за время прохождения закрытой и открытой беты и выхода проекта в релиз в августе 2010. Добавлялись новые фичи, дорабатывались и наворачивались уже существующие. Менялся дизайн, пробовались разные подходы к представлению информации в игре и организации взаимодействия с игроком.
Варианты реализации фильтра техники:
Пострелиз: проблемы роста и пути их решений
С ростом количества кода и ассетов стали выползать различные косяки.
Маркетинг Scaleform обгонял реальную разработку продукта и, как оказалось, многие из заявленных фич или работали не так, как хотелось, или сильно били по производительности, или вообще были в зачаточном состоянии. Была проделана огромная работа по улучшению производительности Scaleform-плеера, причем как с нашей стороны, так и со стороны разработчиков технологии.
Увеличившийся объем кода приводил к интересному спецэффекту. Каждая вьюха (или окно) лежала в своей FLA, содержала свои ассеты и код и компилировалась в отдельный SWF-файл. Таких SWF было очень много, и на рантайме они подгружались в клиент для показа нужного окошка или элемента управления, и, что характерно, порядок загрузки мог меняться в зависимости от того, что делал пользователь в игре.
Проблема заключалась в том, что если менялся код, который использовался в нескольких SWF, и после изменений не все эти SWF пересобирались, то на рантайме могло произойти следующее. Первой загружалась SWF с устаревшим кодом, и в лучшем случае все работало по старому, а в худшем — происходило падение клиента. Понять, что именно приводит к таким результатам, было трудно. Нам приходилось придумывать инструменты и методики, позволявшие отслеживать, что именно нужно пересобрать после изменений.
Также существовала проблема с качеством и консистентностью кода и использованием различных паттернов и стилей программирования. Так получилось потому, что разработку на Flash в проекте начинали люди, которые не были профессиональными Flash-разработчиками. Они учили Flash «в бою», и у каждого был свой бэкграунд (C++, php, Java). Получалось так, что при работе в разных частях проекта нужно было переключаться с одного подхода на другой.
Еще одной болью было взаимодействие Flash с Python. Передавать данные в любую сторону можно было только в виде примитивных типов, что, конечно же, не удовлетворяло нашим запросам. Путей решения было два: использовать JSON или же раскладывать все сложные типы в длинные массивы на одном конце и собирать из этих массивов объекты на другом.
Первый подход хорошо работал, когда объекты были маленькими. Но при росте размера объектов объемы результирующих строк росли, и это сказывалось на скорости выполнения кода — она падала. Второй подход быстро работал, но был сложен для понимания при прочтении кода и требовал титанических усилий при реализации изменений в структуре данных.
К тому моменту, когда все эти проблемы стали сильно тормозить разработку, Scaleform уже довел поддержку ActionScript 3 до приемлемого уровня. У нас вызревал план перевести интерфейсы ангара на новую версию языка и параллельно провести реструктуризацию проекта и создать свой framework, позволяющий быстро и по определенным правилам добавлять новую функциональность в проект.
Работы по подготовке перехода на ActionScript 3 начались в конце 2012 года. Как мы решали стоящие перед нами проблемы, и какие задачи ставили.
Проблема: проблемы с различными версиями кода в разных SWF.
Решение: весь код приложения вкомпиливается в один SWF-файл, который загружается при старте приложения.
Проблема: коммуникация Flash Python.
Решение: переход на использование Direct Access API. Этот механизм позволяет передавать сложные объекты данных при помощи автоматической сериализации/десериализации их на уровне C++. Также использование этого подхода увеличивает производительность за счет того, что ссылки на Flash-объекты можно передавать в Python и производить манипуляции над ними в Python напрямую, вместо поиска нужного объекта во Flash по полному пути к нему при каждой необходимости передачи данных.
Проблема: стандартизация и унификация кода.
Решение: мы реализовали сервисную инфраструктуру и определили наборы интерфейсов и базовых классов, реализуя которые новая функциональность добавляется в проект.
Проблема: автоматизация сборки и добавления нового функционала в проект.
Решение: для сборки мы используем Maven. Проект был реструктурирован и разбит на более логичные подпроекты и подсистемы. Для автоматизации добавления нового функционала мы использовали YAML в качестве языка для описания интерфейсов взаимодействия Flash и Python. На базе YAML автоматически при сборке генерируется код и создаются необходимые сущности — как во Flash, так и в Python. Все, что остается сделать, это написать код и определить точку входа для запуска новой функциональности.
Так, в сентябре 2013 с выходом версии 8.8 лобби игры было полностью переделано на ActionScript 3.
Вот и все на сегодня. Детали о структуре проекта и планах на будущее читайте в следующей статье.
Интерфейс игры World of Tanks в бою
Интерфейс в игре – это, прежде всего, удобство. Он должен позволять игрокам легко разбираться в их возможностях. То, как выглядит интерфейс, является залогом его понимания геймерами. А информативность интерфейса может влиять на скорость обучения игроков игре, а также их будущему комфорту. Именно поэтому очень важно создать продукт, который будет понятен и удобен.
Правильное пользование всеми возможностями интерфейса позволяет эффективно играть на поле боя. И первое, что нужно там замечать – карту.
Карта – главный помощник
Помнить о мини-карте нужно всегда, потому что с ее помощью поступает актуальная информация о передвижении противника. А это возможность координировать всю команду.
Союзники на карте отмечаются зеленым цветом, а противники, соответственно, красным (сиреневый цвет отображается в режиме «цветовой слепоты»).
Для того, чтобы координировать союзников, продумывая тактику, можно отмечать определенные квадраты местности на мини-карте, которые будут видны всей команде. Для этого нужно зажав Ctrl левой кнопкой мыши щелкнуть на необходимый квадрат. В это же время уведомление придет в чат команды, а контур квадрата выделится.
Когда союзниками подается команда «Нужна помощь», то над техникой будет виден данный индикатор.
Мини-карта динамична. Размер квадратов зависит от размера карты. Ее можно скрыть клавишей М или изменить по размеру, используя необходимые клавиши (стандартно это =/-).
Функциональные возможности мини-карты также включают в себя :
Изменить внешний вид карты можно в «Настройках» во вкладке «Игра».
«Уши» команд
«Ушами» команд называются списки команд, которые расположены по двум сторонам экрана. Там обозначены никнеймы игроков, типы техники.
Состояние модулей и экипажа
Очень важным компонентом в игре является отслеживание состояния модулей и экипажа в бою. Пробитие по оборудованию или контузия экипажа – дело серьезное, нужно следить за состоянием своей техники постоянно.
Время боя
Время боя – еще один компонент, который позволяет рассчитывать выстрелы противника для наибольшей игровой эффективности, и тем самым выживать.
Маркеры над танками
Маркеры над танками являются крайне полезным составным интерфейса, который позволяет быстро ориентироваться в бою, представляя какой танк находится в поле зрения.
Направление обстрела
На самом деле, чат является полезным инструментов в координации команды, когда этим пользуются умело. В основном же в чате прибегают к оскорблениям и нравоучениям. Именно поэтому множество игроков предпочитают голосовую связь с командой или своим взводом.
Перезарядка
Время перезарядки в World of Tanks очень часто влияет на судьбу техники. Очень важно следить за этим временем и рассчитывать свои атаки на противника.
Количество снарядов
Всегда в видимости игрока находится индикатор оставшихся боезапасов. Выбрано очень удобное размещение, однако шрифт очень мал, из-за чего множество игроков устанавливают моды для исправления этого недочета.
Готовность аптечки, огнетушителя, ремкомлекта
Изменение интерфейса модификациями
Уже было сказано о модификациях, которые способны менять интерфейс таким образом, чтобы каждому игроку было комфортно играть. Такие нужды возникают из-за разных предпочтений геймеров. Так, с помощью модов можно изменить не только вид интерфейса, но и добавить функции, которых в стандартной версии игры нет.
Существуют основные изменения, которым подвергается интерфейс игроков наиболее часто :
“Краткий” обзор боевого интерфейса WoT патча 0.7.0
“Краткий” обзор боевого интерфейса WoT патча 0.7.0
Мыши плакали, кололись,
но продолжали грызть кактус…
(очень, очень грустный анекдот)
После начала теста 0.7.0 и очередного отказа от модификаций в связи с несовместимостью их с патчем, а так же постоянно поступающими вопросами от друзей и знакомых на тему “а как теперь сделать ТО или ЭТО”, “а почему ТУТ не работает, а ТАМ не показывает” и “почему не сохраняются настройки и как убрать вот ТУ штуку” решил написать краткий обзор боевого интерфейса игры с дальнейшим разбором чего не хватает в нем.
После нажатия кнопки “ В БОЙ! ” битва сразу не начинается. Для начала, методом случайных чисел и следуя неким правилам баланса, из жаждущих вступить в бой игроков формируются 2 равные по силам команды. О методах балансировки и правильности мы спорить не будем, для этого есть другие темы, где все это описано. Нас же интересует экран загрузки, который появляется после формирования команд, а собственно вот он ( рис.1)
И он же в процессе загрузки ( рис.2.)
Казалось бы, бестолковая штука, но игрок некоторое время проведший в игре не откидывается на кресло, а внимательно его изучает. Что же мы видим на экране:
1. Фон.На заднем плане некий пейзаж отображающий кусок карты, на которой предстоит сражаться. Кроме эстетической – никакой нагрузки фон не несет. (На сайте доступны модификации, добавляющие на задний план миникарту локации – об этом будет ниже)
2. Название карты. В случае со случайными(рандомными боями) это уже полезная информация. Опытные игроки, прочитав название карты, уже начинают стоить планы и продумывать тактику в зависимости от танка на котором вышли в бой и состава команды.
3. Задача. В данный момент в игре только один тип случайных боев о чем нас и информирует надпись “Захватить вражеский флаг или уничтожить всю технику противника.” Пока не будут введены другие типы – просто игнорируем данный факт – делать–то в бою все равно собственно нечего кроме как захватывать и уничтожать.
5. Прогресса бар. Полоска заполняется в процессе подгрузки карты. После полного заполнения мы попадаем на карту
2. Элементы интерфейса, видимые после загрузки.
Давайте по пунктам распишем элементы интерфейса:
1. Индикаторы. Технические показатели – рассматриваем слева на право:
— PING (ПИНГ) – Данный показатель имеет прямое отношение к качеству связи предоставляемой вашим провайдером. Это не что иное, как время отклика сервера, то есть время в миллисекундах, за которое сигнал уходит к серверу и возвращается обратно. Здесь, чем цифра ниже, тем лучше. Для комфортной игры пинг должен быть меньше 100, хотя многие утверждают, что до 150 – вполне комфортно. При высоких пингах начинают наблюдаться задержки, выраженные в резких перемещениях танков по карте, пропадание танков, замирание на местах и замедленной реакции на нажатие кнопок. Для уменьшения пинга не забываем во время игры отключать различные закачки из интернета (торрент и т.п.), просмотр потокового видео, прослушивание радио через интернет. Так же, если в домашней сети присутствует больше одного компьютера, стоит отключить закачки и на них.
— LAG(ЛАГ) – лапочка сигнализирующая о потере пакетов. Так же напрямую связанна с качеством связи. Зеленый – все хорошо. Красный – что-то не так. От чего конкретно зависит лаг – не до конца ясно. Иногда при идеальной связи лампочка горит красным непрерывно. Советы по исправлению такие же, как и при высоком пинге, но иногда проблемы связанны с игровым сервером, в частности, когда он сильно перегружен – тут мы ничего поделать не сможем – это к разработчикам.
2. Счет. Тут все просто как в футболе – количество убитых противников нашими союзниками и врагами.
4. Информация. Перед началом боя здесь отображается 30-ти секундный обратный отсчет до начала битвы. В этом же месте будут отображаться индикаторы захвата базы ( рис. 4).
5. Таймер. До начала боя – таймер отсчета до боя. В процессе боя – таймер отсчета до конца боя (максимум 15 минут) – минимум время до уничтожения всех танков, то есть, как получиться.
8. Индикатор танка. Очень полезная штука, в ней отображается состояние нашего стального боевого коня. Информации куча, а так как обзор все-таки “краткий” не буду останавливаться на каждом значке, а перечислю по быстрому:
— HP(ХП) – состояние брони танка текущее/максимальное,
— Состояние модулей. Серый – целый, Желтый – поврежден, Красный – выведен из строя.
— Состояние членов экипажа. Серый – в строю, Желтым – контужен (выведен из строя).
— Положение корпуса относительно направления взгляда и полодение башни относительно корпуса. Так же на модели танка желтым и красным будут подсвечиваться некоторые поврежденные модули.
9. Сообщения об уничтожении танков. В данном поле будут отображаться сообщения о уничтожении техники ( рис. 6). Красным – уничтожение союзника, зеленым – уничтожение противника, желтым – уничтожение противника самим игроком.
10. Миникарта. Миниатюрная карта местности, на которой значками обозначено положение танка игрока, а так же отметки техники союзников и обнаруженных противников. Обозначения описывать не буду, ничего сложного там нет. Пользоваться картой тоже не сложно. По карте всегда можно оценить, куда направились дружественные войска, где переизбыток техники, где её не хватает.… Так же виды незакрытые участки обороны, атаки противников и т.п. Если зажать клавишу Ctrl, становиться активен курсор – если навести курсор на конкретный квадрат карты и нажать правую клавишу мыши квадрат подсветиться для всех союзников, а в чате появиться сообщение типа “Внимание на квадрат A0!” ( рис.7). О настройке карты поговорим в соответствующем разделе.
— Сообщение о повреждении модуля и имя недруга повредившего его.
— Сообщение о починке модуля.
— Сообщение об уничтожении своего танка и имя стрелка. Так же иногда можно узнать причину смерти например: “Взрыв боекомплекта”.
— Информация о сохранении скриншота игры и путь его сохранения.
Загрузка Интерфейса
Косяк на косяке последнее время у них. Интересно, позориться не устали?
мож сервак тупит. или инет.
у меня сегодня все норм..хотя раньше такое бывало иногда..
Косяк на косяке последнее время у них. Интересно, позориться не устали?
Кэши, куки давно чистили? Они периодически забиваются, даже на чистом клиенте!
Для диагностирования проблемы сформируйте отчет программы WGCheck согласно инструкции и прикрепите сюда к сообщению через расширенную форму.
Для диагностирования проблемы сформируйте отчет программы WGCheck согласно инструкции и прикрепите сюда к сообщению через расширенную форму.
Ответа не последовало.
Пожалуйста, подробно опишите в заявке, какая у вас проблема и что вы уже пытались делать для её решения и как именно. Можете сослаться на эту тему, как попытку помочь Вам и на форуме.
Создание новой или обновление старой заявки приводит к их объединению, в результате чего она смещается в конец очереди на рассмотрение.
Наберитесь терпения и подождите.
Вам непременно ответят.