Хонич А.
Как самому создать трехмерную игру стр. 131 На этой схеме SO и S1 - субсектора. Они имеют номера соответственно 0x8000 и 0x8001. Так как у нас в данном случае только один узел, то в функцию ProcessTree передается 0 (numnodes-1 == 1-1 = 0). В функцию GetNextBranchofTree передаются три параметра PozX ofPlayer и PozY ofPlayer - координаты игрока по X и Y соответственно и п - указатель на текущий узел. Эта функция проверяет, с какой стороны от линии раздела находится игрок и возвращает: 0 - если с левой стороны; 1 - если с правой стороны. В нашем случае эта функция возвращает 0, т.к. игрок находится с левой стороны от линю! раздела. На левой стороне находится субсектор S1 с номером 0x8001. Таким образом вызывается далее функция ProcessTгее с номером 0x8001. Т.к. 15 бит установлен, то вызывается функция Draw Subsector, которая осуществляет прорисовку сегментов стен этого субсектора в видимой области. После этого происходит возврат обратно в первоначальную функцию ProcessTree и управление передается функции CheckVisual ОррАгеа. Это достаточно сложная функция. Она проверяет путем аксонометрических преобразований, не захватывает ли обзор игрока пространство, относящееся к противоположной ветви (в нашем случае - это субсектор S0). И если не захватывает, то возвращает 0. В нашем случае эта функция возвращает 1, т.к. игрок видит часть субсектора S0. В этом случае прорисовывается субсектор с номером 0x8000. Таким образом, вы видите - какова цепочка узлов (сколько звеньев в этой цепочке), такова вложенность функции ProcessTree. Подробнее о функциях GetNextBranch ofTгее и CheckVisual ОррАгеа мы расскажем позже. 7.8. Ресурс SECTORS. (Восьмой объект) SECTOR - это горизонтальная область на карте, где определяются высоты пола и потолка, освещенность, а также текстуры для полов/потолков. Сектора могут быть различных форм, причудливых очертаний. Они могут быть большими и маленькими. В одном помещении может быть определено несколько секторов. В помещении - любое изменение высот пола и потолка или яркости - это новый сектор (и следовательно, отдельный LINEDEFS и SIDEDEFS). Каждый “сектор” состоит нз 26 байт, включая два значения типа short, две строки по 8 символов типа char и затем 3 значения типа short: (1) высота пола для этого сектора; (2) высота потолка для этого сектора; Разница в 24 между высотами полов двух соседних секторов является проходимой для игроков и монстров (при условии, что они поднимаются |
||||
|