Хонич А.
Как самому создать трехмерную игру
стр. 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 десятки.





Новости
В 2018 году выйдет игра о затонувшей подлодке «Курск»
Польская студия Jujubee после двух лет работы над компьютерной игрой о гибели подводной лодки «Курск», затонувшей в 2000 году, объявила, что завершит проект в 2018 году.
Подтвердились слухи о разработке Resident Evil 2 Remake
Сотрудники компании Capcom тоже активно подливали масла в огонь, заявляя о том, что ремастеринг уже находится в разработке и скоро увидит свет.