Разработка технологической платформы в условиях временного прессинга Автор: Кирилл Лебедев Компания: The Web Production Email: [email protected]
Разработка технологической
платформы в условиях временного прессинга
Автор: Кирилл ЛебедевКомпания: The Web Production
Email: [email protected]
О себе
Разработчик ПО (стаж – 14 лет)
Работаю в компании The Web Production
Отвечаю за разработку 3D игр
Типовые ошибки
Типовая ошибка № 1
Пропуск системного уровня
(разработка игры без технологической платформы)
Всё равно, что попросить каменщика построить небоскрёб
Проблемы
1. Рутина2. Посторонний код3. Дублирование кода
Рутина
Загрузка ассетов Сохранение игры Загрузочный экран Сообщения об ошибках
Посторонний код
Дублирование кода
Каждый программист начинает изобретать свои контейнеры и свою
оконную систему
(три реаллоцируемых массива и три оконные системы)
Типовая ошибка № 2
Разработка в отрыве от игры
Особо тяжёлые случаи
1. Разработка платформы ради самой платформы
2. Разработка платформы на все случаи жизни
– это игра, а не движок
Главное –
Платформа должна быть заточена под игру или определённый класс игр
Рекомендация
Некоторые разработчики начинают с абстрагирования:
от файловой системы;от устройств ввода;от системы управления памятью;от ....................................................
Опыт портирования
Замена функции fopen на функцию OpenFile – дело нескольких минут
Абстрагирование без конкретной цели НЕ принесёт результат
(если только результатом не является объём кода)
Вывод
Что общего между
Ничего – вне условий конкретной задачи
И ?
Если цель - платформа
разработчики "полируют" фичи, а не создают продукт
Из жизни
Система загрузки скинов == всей остальной программе *
* по объёму кода
В условиях временного прессинга
Концентрируемся на задаче, а не на красивостях
Разрабатываем платформу, под конкретную игру или серию игр
По-максимуму используем стандартные библиотеки
Для чего нужна технологическая платформа?
Назначение № 1
загрузки и выгрузки ассетов; чтения и сохраненияч игровых данных; отображения loading screen'а; обработки ошибок; и т.д.
Освободить программиста от рутины:
Важно
Сконцентрировать внимание программиста на самой игре
Назначение № 2
Предоставить технологию* для разработки игры
* – под технологией я понимаю готовый технологический процесс
Некоторые задачи
Задача № 1
Загрузка ассетов, чтение и сохранение игровых данных
Требования
не должна "тормозить" игру;должна сопровождаться
анимированной картинкой;должно выдаваться сообщение в
случае ошибки
Решения 1 2 3 4
Группируем длительные операции (загрузка, сохранение) в "пачки"
Решения 1 2 3 4
Исполняем "пачку" в определённый момент времени:
1. при переходе в другую локацию;2. при запуске мини-игры
Решения 1 2 3 4
Делегируем "пачку" операций отдельному потоку
Решения 1 2 3 4
Организуем работу с потоком при помощи асинхронного обмена сообщениями
Игровой цикл
Начало
Играем?
Получить сообщения
...
Отправить сообщения
Конец
Да
Нет
Получаем сообщения от загрузочного потока
Отправляем сообщения загрузочному потоку
Преимущества 1 2 3
Не возникает взаимных блокировок *
* - синхронизирующий объект захватывается на короткое время
Преимущества 1 2 3
Сообщения обрабатываются в заданном порядке *
* - Очередь задаёт порядок выполнения операций
Преимущества 1 2 3
Игра не будет "тупить" *
* - Количество потоков не зависит от количестива сообщений
Задача № 2
Как описывать игровую логику?
"Хардкодить" в C++ - коде – не лучший вариант
Модели
Событийная модель
Игра – набор обработчиков различных событий
Событийная модель порождает проблему "узников" оператора if *
* http://www.triz-ri.ru/themes/method/creative/creative57.asp * http://www.triz-ri.ru/themes/method/creative/creative57.asp
Вывод
Что делать, если операцию нужно выполнить при наступлении
нескольких событий?
Вопрос
Конвейерная модель
Игра – фиксированная последовательность элементарных операций *
* Каждой операции соответствует свой набор условий
Игровая логика представляется в виде таблицы правил
Конвейерная модель
Алгоритм
Построение конвейерной модели
1 2 3
Выявляем элементарные операции
1 2 3
Выстраиваем из них определённую последовательность
1 2 3
Задаём условия выполнения для каждой операции
Пример
Описание игровой логики для мини-игры "Нарезка" игры "Подготовка Стола" *
* аналог Cooking Mama
Сценарий нарезки картофеля
№ Действие Событие
1 Доставка Автоматически
2 Разрезание Движение курсора
3 Убирание половинки Автоматически
4 Поворот Z-90 Автоматически
5 Разрезание Движение курсора
6 Поворот Y-90 Автоматически
7 Шинкование Взмах
8 Отправка Автоматически
Запись сценария в CSV-файле
Type Name Auto Arrow Stroke
Model Potato
Anim Potato_delivery YES
Anim Potato_cut_half YES
Anim Potato_remove_half YES
Anim Potato_rotate_Z_90 YES
Anim Potato_cut YES
Anim Potato_rotate_Y_90 YES
Anim Potato_slice YES
Anim Potato_dispatch YES
Отличие
от таблицы переходов
Таблица переходов
Условие 1 Условие 2 Условие 3
Соятояние 1 Действие 1
Состояние 2 Действие 2
Состояние 3 Действие 3
ориентирована на состояния
Конвейерная модель
Состояние Условие 1 Условие 2 Условие 3
Действие 1 Состояние 1 Да
Действие 2 Состояние 2 Да
Действие 3 Состояние 3 Да
ориентирована на операции
Пример
Логика поведения мыши в Комнате Переодевания
Задача
Игрок выбирает одежду или обувь, которую хочет примерить
Мышь привозит соответствующую тележку
Сценарий поведения мыши
ОперацияИгрок хочет
поменять одежду?
Где находится?Примерена
одежда?
Стоит Нет В начале Нет
Хвалит Нет В начале Да
Уходит Да В начале
Меняет Да В конце
Приходит Нет В конце
Ссылки
http://www.triz-ri.ru/authors/lebedev_art.asp