Хонич А.
Как самому создать трехмерную игру
стр. 139

"Активизированный” монстр будет спокойно преследовать игрока, но он не будет его атаковать, если на пересечении столбца (сектор, где находится этот монстр) и строки (сектор, где находится игрок) будет стоять “ 1 ”. Таким образом, все единицы в реусурсе REJECT определяют компанию миролюбивых монстров, которые с угрожающим видом всюду преследуют игрока, но фактически в бой с ним не вступают.

Каким образом этот битовый массив “запихнуть” в ресурс REJECT ? При чтении елею направо и сверху вниз

первый бит относится к ну левому разряду 0-го байта;

второй бит относится к первому разряду' 0-го байта;

девятый бит относится к ну левому разряду 1 -го байта.

Таким образом, для нашего вышеупомянутого случая эта таблица будет выглядеть так (надеюсь, что вы не забыта, что нулевой разряд находится справа): 1010001000101001 01000111 хххххххО (в шестнадцатеричном: А2 294700). Таким образом, ресурс REJECT - это длинная строка битов: от самого младшего значимого бита, до самого старшего (хотя старший может быть и незначимым, если квадрат количества секторов не кратен восьми). Обычно, если монстр в секторе А не может обнаружить игрока в секторе В, то справедливо и обратное: игрок в секторе В тоже ие может увидеть монстра в секторе А. Таким образом, если 0/1 установлено, то 1/0 так же должно быть установлено. На пересечении одинаковых секторов (например, 0/0 ти 3/3) в подавляющем большинстве случаев бит сброшен. Однако для очень больших секторов бывают исключения. Битовый массив REJECT использу ется в DOOM’e для ускорения обнаружения игроков монстрами. В этом случае в начале функции CheckVisualOfThings, в которую передаются два параметра - указателя на THING, проверяется бит на пересечении сектора, в котором находится монстр (первый объект), и сектора, в котором находится игрок (второй объект). Если это единица, то проверки видимости объектов не производится, а осу ществляется выход из функции CheckVisualOfThings с возвратом “0”, что означает: игрок не обнаружен. В противном случае возвращается результат функции CheckLookThings, которая проверяет, “видит” ли один объект другого. Если бы не было массива REJECT, то это могло бы значительно затормозить игру, т.к. функцию CheckLookThings пришлось бы вызывать для каждого монстра, независимо от его местоположения относительно игрока. И тут кстати заметить, что функция CheckLookThings одна из самых непростых и запутанных, и, следовательно, она выполняется достаточно долго

Это один из примеров использования техники предварительных вычислений для ускорения работы нгры. Таких примеров в DOOM’e десятки.





Новости
Авторы Hellblade: Senua’s Sacrifice удивлены количеству игроков на ПК
В октябре прошлого года студия Ninja Theory рассказала, что продажи Hellblade: Senua's Sacrifice оказались выше, чем ожидали сами разработчики, а уже через месяц они достигли полумиллиона копий.
Хождение по Аду в Agony отнимет у игроков 12 часов
Напомним, что Agony поступит в продажу на PC, PS4 и Xbox One 29 мая. После релиза игры авторы намерены заняться VR-режимом.