Докладчик: Пётр Камышников, глава команды интерфейса...

  • View
    372

  • Download
    1

  • Category

    Career

Preview:

DESCRIPTION

Процесс производства интерфейсов. Составляющие. Последовательная реализация. Аддоны. Примеры интересных задач. Цифры.

Citation preview

www.mail.ru

Камышников Пётрруководитель команды интерфейсов

Интерфейсы в Аллодах Онлайн

www.mail.ru 2

MMO RPG Аллоды Онлайн

www.mail.ru 3

MMO RPG Аллоды Онлайн

www.mail.ru 4

MMO RPG Аллоды Онлайн

www.mail.ru 5

MMO RPG Аллоды Онлайн

www.mail.ru 6

Множество людей - игроков

Сервер

Клиент Клиент ... Клиент

www.mail.ru 7

Интерфейс в развитии игрока

Начало игры Высокий уровень

www.mail.ru 8

Множество людей - разработчиков

• Дизайнеры• Художники• Программисты• QA

www.mail.ru 9

Дизайнер и художник

Анализ Концепт Дизайн Создание аддона

Концепт ДизайнОтрисовкаэлементов

www.mail.ru 10

Аддон – что это?

Ресурсы

Шаблоны виджетов Скрипты LUA

Изображения Локализируемые тексты

Экземпляры

www.mail.ru 11

Элементы аддона - виджеты

• AddonDesc• MainForm• Widget– Panel– TextView– Button– EditLine– Container

– Всего виджетов: 4982

www.mail.ru 12

Типы аддонов

• Ingame• MainMenu• Tests• User mods

– Всего аддонов: 125

www.mail.ru 13

States – области жизни аддонов

• System• PreMission• Mission• DeveloperState

www.mail.ru 14

LUA – реализация игровой логики

• Версия: 5.0 (патч 5.0.3)• Также используется в:– Adobe Photoshop Lightroom– Baldur's Gate – Civilization V– Crysis– Diablo 3– S.T.A.L.K.E.R.– World of Warcraft

• Всего файлов: 470 (+321 QA)• Всего строк: 102,163 (+46,933 QA)

http://www.lua.org/

www.mail.ru 15

Запуск игры - инициализация

Init

Create State

Create Addon

Create Widgets

Init LUA state (интерпретация скриптов, регистрация обработчиков сообщений)

Init GameSystem

www.mail.ru 16

GameSystem

Менеджер объектов

Главный игрок

Имя, уровень Менеджеры

Контейнеры

Заклинания Питомец

Интерактивные объекты

Игроки

Корабли

Устройства

Менеджеры

Почта

Гильдия

Территориальные войны

www.mail.ru 17

Объекты. Откуда брать?

Сервер Репликация Клиент

• Создаются• Уничтожаются• Содержат поля:• Примитивные• Классы• Контейнеры

www.mail.ru 18

Создание и обработка сообщений

• Player.Mechanics.Stats.IntStats.Health.Value.Result

• DEFINE_EVENT( OnPlayerHealthChanged, Player, Mechanics, Stats, IntStats, Health, Value, Result)

• bool Player::OnHealthChanged( const Replica::OnPlayerHealthChanged ) {

… // логика}

• pEventProcessor->Register( this, OnHealthChanged, true );

www.mail.ru 19

Объект в GameSystem

Init GameSystem

Init MainPlayer

Init MountsManager

Подписка на изменение списка скакунов

Подписка на изменение активного скакуна

www.mail.ru 20

Поля объекта меняются

Список скакунов изменился

Создание объекта скакуна

Подписка на изменение полей

Отсылка EVENT_MOUNT_ADDED( mountId) в скрипт (в очередь сообщений)

www.mail.ru 21

Обработка в скрипте

Очередь сообщений обрабатывается в MainLoop

Для всех States

Для всех Addons

Для всех Handlers

Передача управления скриптовому методу с параметрами

www.mail.ru 22

Реализация логики дизайнером

• Вызов методов– local mountInfo = mount.GetInfo( mountId )

• Логика• Изменение виджетов– wtMountInfo:SetText( mountInfo.name )

www.mail.ru 23

Сложные случаи

• Создание объектов• Модульные объекты• Простота vs Красота

www.mail.ru 24

Иерархия объектов

InteractiveObject

Creature

Mob Player

MainPlayer

OtherPlayer

Device

Chest Stele UsableDevice

Cannon

Visor

Accelerator

Transport

www.mail.ru 25

Сложный случай – создание объектов

Источники

•Реплика•Клиентская механика•Графический движокКлассы

реализаций

•InteractiveObject•Device•UsableDevice•Cannon

www.mail.ru 26

Сложный случай – отслеживание позиции

Одногруппники• Рядом– Всё есть

• Далеко– Нет в графическом движке– Нет в клиентской механике

• Вне игры– Ничего нет

www.mail.ru 27

Сложный случай – модульные объекты

Раньше:• Игрок– Характеристики– Здоровье– Умирает– Наносит урон другим игрокам и получает урон от них– Передвигается по земле

• Корабль– Умеет летать– Устройства– Наносит урон устройствам и кораблям, получает урон

www.mail.ru 28

Ктулхи – великие и ужасные

• Здоровье• Умеет летать• Наносит урон устройствам и

кораблям, получает урон от устройств

• Умирает

www.mail.ru 29

Наследование vs Агрегация

• Модульный объект AstralUnit– Компоненты:

• Health• Mortal• FlyController• Damage

– Всего базовых: 14• Модульный объект Player

– Компоненты:• Health• Mortal• PlayerMoveController• Damage

– Всего базовых: 20

www.mail.ru 30

Сложный случай – игровые предметы

GameItem:• Ресурс шаблона• Игровой предмет в контейнере игрока• Аукцион• Лавка редкостей• Чат

www.mail.ru 31

Простота vs Красота

• Красивая последовательность событий– Нанесение урона синхронно с анимацией– Запуск заклинаний моментален на клиенте

• Ограничение информации для пользователя• Простота доступа в скрипте• Оптимизация сообщений в скрипт• Оптимизация запросов на сервер– Фильтр ошибочных команд на сервер– Сокращение запросов к аукциону, лавке редкостей

www.mail.ru 32

(c) baflyer http://allods.mail.ru/media.php?item=10338

Камышников Пётрруководитель команды интерфейсов,

департамент клиентских игрkamyshnikov@corp.mail.ru

СПАСИБО!

www.mail.ru

Mail.RuРазработчик игр и сервисов №1Крупнейший работодатель в отрасли

Работайте у нас!job.gamedev@corp.mail.ruhttp://corp.mail.ru/career/vacancies/voronezh