View
372
Download
1
Category
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
Recommended