РАЗРАБОТКА ИГР НА С++ ПРИЕМЫ И ПРАКТИКИ

Содержание

Слайд 2

ПЛАН ЛЕКЦИИ

Программная организация игр
Особенности C++ при разработке игр
Ваши вопросы

ПЛАН ЛЕКЦИИ Программная организация игр Особенности C++ при разработке игр Ваши вопросы и дискуссия
и дискуссия

Слайд 3

ИГРА – ЭТО ПРОГРАММА

Процесс
Одна или несколько нитей исполнения (threads)
Язык программирования
Native-язык (C/C++)
Managed-язык (C#,

ИГРА – ЭТО ПРОГРАММА Процесс Одна или несколько нитей исполнения (threads) Язык
Java)
Скриптовый язык (Lua, Perl, Python)

Слайд 4

ОРГАНИЗАЦИЯ ИГРЫ

Инициализация программы

Загрузка ресурсов

Пока играем

Обновление кадра

Рендеринг

Выгрузка ресурсов

Инициализация программы (создание окна, инициализация платформозависимых

ОРГАНИЗАЦИЯ ИГРЫ Инициализация программы Загрузка ресурсов Пока играем Обновление кадра Рендеринг Выгрузка
систем)
Загрузка ресурсов (текстуры, модели, звуки, шейдеры)
Обновление кадра (логика игры)
Рендеринг (отображение на экране)
Выгрузка ресурсов

Слайд 5

C++ VS C#/JAVA/OBJC

Нативный код или управляемый?
Наличие библиотек на нужном языке
Доступ к низкоуровневым

C++ VS C#/JAVA/OBJC Нативный код или управляемый? Наличие библиотек на нужном языке
частям ОС
Доступ к платформозависимым частям ОС
Скорость исполнения
Наличие специалистов и их квалификация

Слайд 6

ОСОБЕННОСТИ C++

Наследование
Шаблоны
Выделение памяти
Обработка ошибок
Стандартная библиотека
Паттерны проектирования

ОСОБЕННОСТИ C++ Наследование Шаблоны Выделение памяти Обработка ошибок Стандартная библиотека Паттерны проектирования

Слайд 7

НАСЛЕДОВАНИЕ

Используем интерфейсы
при множественном наследовании

PROFIT: не используем dynamic_cast и RTTI

НАСЛЕДОВАНИЕ Используем интерфейсы при множественном наследовании PROFIT: не используем dynamic_cast и RTTI

Слайд 8

НАСЛЕДОВАНИЕ

Не создаем лишние сущности
и глубокие иерархии

PROFIT: значительное упрощение кода

НАСЛЕДОВАНИЕ Не создаем лишние сущности и глубокие иерархии PROFIT: значительное упрощение кода

Слайд 9

НАСЛЕДОВАНИЕ

Тотальный полиморфизм –
это ПЛОХО!

«А вдруг от класса, который я пишу, в

НАСЛЕДОВАНИЕ Тотальный полиморфизм – это ПЛОХО! «А вдруг от класса, который я
будущем захотят сделать наследника»
«Напишу виртуальный деструктор на всякий случай»
«Я наследую все классы в игре от IObject»

PROFIT: экономия памяти и времени исполнения

Слайд 10

ШАБЛОНЫ

«Шаблоны – это круто!»
«Я читал книжку Андрея Александреску»
«Я разобрался с boost»
«Я люблю

ШАБЛОНЫ «Шаблоны – это круто!» «Я читал книжку Андрея Александреску» «Я разобрался
головоломки и «абстрактный» код»

Причины превращения кода
из простого в сложный:

Слайд 11

ШАБЛОНЫ

Джентельменский подход к использованию:

Пишем шаблонные классы там, где это нужно, а не

ШАБЛОНЫ Джентельменский подход к использованию: Пишем шаблонные классы там, где это нужно,
там, где хочется!
Помним, что шаблонных классов не существует в run-time
Помним, что типы могут неявно приводиться друг к другу
Помним, что не все компиляторы поддерживают стандарт С++ в отношении шаблонов

Слайд 12

ШАБЛОНЫ

Где полезно использовать

Математические алгоритмы и структуры данных
Реализация паттернов проектирования
Собственные контейнеры

ШАБЛОНЫ Где полезно использовать Математические алгоритмы и структуры данных Реализация паттернов проектирования Собственные контейнеры

Слайд 13

ВЫДЕЛЕНИЕ ПАМЯТИ

Стараемся не выделять динамическую память внутри игрового цикла
Используем предвыделение памяти
Используем передачу

ВЫДЕЛЕНИЕ ПАМЯТИ Стараемся не выделять динамическую память внутри игрового цикла Используем предвыделение
аргументов по ссылке
Храним в коллекциях указатели, а не сами объекты
Move-семантика в C++11
Загрузка/выгрузка ресурсов по требованию

Слайд 14

ОБРАБОТКА ОШИБОК

Коды ошибок вместо исключений!
Используем логирование
Используем ASSERT’ы
Собираем статистику

ОБРАБОТКА ОШИБОК Коды ошибок вместо исключений! Используем логирование Используем ASSERT’ы Собираем статистику

Слайд 15

СТАНДАРТНАЯ БИБЛИОТЕКА

Три «кита»: vector, list и map

В стандарте С++11:
Умные указатели
(shared_ptr, weak_ptr

СТАНДАРТНАЯ БИБЛИОТЕКА Три «кита»: vector, list и map В стандарте С++11: Умные
и т.д.)
Потоки и атомарные операции

Классы string и wstring

Слайд 16

ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ

Синглтон
Абстрактная фабрика
Фасад
Наблюдатель
Итератор

ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ Синглтон Абстрактная фабрика Фасад Наблюдатель Итератор

Слайд 17

ВЫВОДЫ

1

2

3

C++ успешно используется и будет продолжать использоваться при разработке игр

В C++ есть

ВЫВОДЫ 1 2 3 C++ успешно используется и будет продолжать использоваться при
особенности, которые необходимо учитывать при разработке

Программисты C++ востребованы в индустрии компьютерных игр

Имя файла: РАЗРАБОТКА-ИГР-НА-С++-ПРИЕМЫ-И-ПРАКТИКИ-.pptx
Количество просмотров: 331
Количество скачиваний: 1