Зальцман М.
Компьютерные игры: как это делается
стр. 180

Некоторые движки позволяют создавать игровые объекты, а затем добавляют или удаляют их при прорисовке. Другие предпочитают, чтобы объекты сами себя рисовали с помощью класса screen. Третьи движки одновременно прорисовывают несколько сцен, используя систему окон. Наконец, некоторые программы накладывают объекты на сцену слоями в особом порядке, оставляя основной экран интерфейса самым последним, чтобы он всегда был виден.

Ряд игровых компаний открыли доступ к исходным кодам своих старых игр. Хотя вас, скорее всего, не заинтересует прямое использование их архаичных и потерявших блеск движков, вы можете захотеть исследовать основной цикл игры, механизмы ввода данных, передачу сообщений внутри игры, обработчик объектов, инструменты отладки и систему прорисовки игрового мира.

Один из примеров предложения исходного кода игры через Интернет - продукция компаний Raven Software и Activision, опубликовавших исходные тексты Heretic и Hexen для бесплатного использования. Загрузить их можно с узла www2.ravensoft.com/source. Не стала прятать свои исходные коды и id Software, выложившая в Интернет код Quake.

Избегайте статических классов и переменных

Аллен Джексон предостерегает от опасности попадания в «ловушку памяти» при использовании статических классов и приводит пример программы, демонстрирующей альтернативный способ обойти это часто встречающееся программистам препятствие.

Статические переменные подобны глобальным, так как они доступны из большинства классов, но одновременно может существовать только один экземпляр такой переменной. Существует несколько классов, таких как ClassOperatingSystem, ClassGameSound и ClassFileSystem, которые действительно подразумевают наличие единственного экземпляра класса. Некоторые другие классы выглядят так, будто для них тоже должен существовать только один экземпляр, хотя иногда допускается наличие и нескольких экземпляров. Классический пример подобного статического класса - ClassGameWorld:

class ClassGameWorld {

public:

// статические данные игрового мира static void* m_GameWorldData;

// статические компоненты-функции

static bool Install(void);

static bool Remove(void);

static bool AddObject(GameObject& _obj);

};

После определения класса программист мог использовать функцию World: :AddObject() в любом месте в своих модулях, что удобно, но позволяет


Новости
Little Nightmares стала «миллионером»
Шведская компания Tarsier Studios и издательство Bandai Namco Entertainment объявили, что с момента релиза на всех платформах было продано более миллиона копий Little Nightmares.
Realm Royale растеряла почти всех своих игроков
Игроки Realm Royale жалуются на технические проблемы, обилие читеров и навязчивый донат.