Конгер Д.
Физика для разработчиков компьютерных игр
стр. 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 () есть только одно отличие от версии из предыдущей главы. После рендеринга всех шариков новая версия выполняет рендеринг поверхности земли.

Новости
В PUBG вышла новая карта «Санок»
Bluehole не один месяц тестировала третью карту для PUBG, и сегодня тропическая миниатюрная карта «Санок» наконец-то вышла на общих серверах.
В Warface добавили режим «Королевская битва 2.0»
В Warface разработчики добавили режим «Королевская битва 2.0». Старая версия доработана, количество игроков увеличено с 16 до 32.