Конгер Д.
Физика для разработчиков компьютерных игр
стр. 306

В листинге 11.5 приведен код из файла Launcher. срр. Этот код весьма напоминает код из файла TigerToss. срр, который мы разбирали в главе 10. Но есть и определенные отличия. Рассмотрим этот код подробнее.

Замечание

Для экономии бумаги в листинге 11.5 отсутствуют многие комментарии из файла Launcher.срр на компакт-диске (в папке Source\Chapterll\La-uncher).

Файл Launcher.срр считает все движущиеся объекты шариками. Однако - в качестве шутки - для их отображения на экране используется та же сетчатая модель тигра, что и в предыдущих главах. В строках 7-9 листинга 11.5 объявляется массив из пяти «шариков».

В строке 10 программа объявляет объект класса ground. Если вы посмотрите на функцию Gamelnitialization () дальше в листинге (она начинается со строки 52), то увидите, что она загружает сетчатые модели и для «шариков», и для поверхности земли. Эта функция задает параметры и начальное местоположение каждого шарика, а также прикладывает к нему импульсную силу.

Кроме того, функция Gamelnitialization () прикладывает к каждому шарику постоянную силу, направленную вертикально вниз, с величиной 9.8. Вспомните - ускорение силы тяжести, обозначаемое вектором g, равно -9.8 м/с2. Оно направлено вертикально вниз, поэтому вектор должен указывать вниз вдоль оси у в нашей системе координат.

Для инициализации объекта класса ground нужно только загрузить его сетчатую модель. Функция Gamelnitialization () делает это в строке 193.

Функция UpdateFrame (), начинающаяся в строке 207, выполняет солидную часть работы программы. Как и в программе из предыдущей главы, функция UpdateFrame () использует пару вложенных циклов для поиска столкновений между шариками.

Операторы, проверяющие шарики на столкновение с поверхностью земли, начинаются в строке 254. Функция UpdateFrame () проверяет, соприкасается ли ограничивающая сфера каждого шарика с поверхностью земли или углубилась в нее. Если сфера углубилась в землю, то функция UpdateFrame () задает для шарика такую высоту, что сфера будет только соприкасаться с поверхностью земли. Это делается в строках 276-278. Но если шарик будет соприкасаться с поверхностью земли, то при следующей итерации моделирования опять будет обнаружено его столкновение с этой поверхностью. Это не то, что нам нужно. Поэтому в строках 281-283 функция UpdateFrame () приподнимает его над поверхностью земли на высоту, равную 1 % от радиуса ограничивающей сферы. Это довольно эффективный прием. Игрок не заметит его, но программа - заметит.

В версии функции RenderFrame () есть только одно отличие от версии из предыдущей главы. После рендеринга всех шариков новая версия выполняет рендеринг поверхности земли.

Новости
Авторы Max Payne раскритиковали крупные игры
Глава по коммуникации студии Remedy Томас Пуха заявил, что в нынешних реалиях игрового рынка его команде пришлось реорганизовать производство.
Ubisoft выпустит эксклюзивную фигурку Father’s Calling
Компания Ubisoft сообщила, что коллекционная фигурка Father’s Calling, представляющая собой лидера организации «Врата Эдема» из Far Cry 5, поступит в продажу 22 марта 2018 года по цене 3999 рублей.