Просмотр
Материал из DoomDev
Страница «
Полиобъекты
»
Перейти к:
навигация
,
поиск
Так как для рендеринга используются предварительно рассчитанные [[BSP]], то в ванильном Doom невозможно передвигать конструкции уровня по X и Y координатам. В ZDoom эту проблему решает поддержка полиобъектов. Полиобъект - группа односторонних линий, содержащихся в одном субсекторе. ---- Создавать полиобъекты несложно, когда вы понимаете как это делается. Конечно, первое время, их создание может казаться сложным. <table border="0"> <tr><td><center> [[Image:Poly01.png]] </center></td><td> Для начала нам нужна сама карта. Я буду создавать скользящие двери (наверное, самый простой тип полиобъектов), поэтому нам нужно две комнаты с высотой потолка 192 и коридором между ними (где и появятся полиобъекты) с высотой потолка 128. Пол везде находится на высоте 0. </td></tr> <tr><td><center> [[Image:Poly02.png]] </center></td><td> Теперь нужно создать полиобъекты. Их можно разместить в любой точке карты (как вы увидите позже ZDoom сам перенесет их в точку появления), но для простоты их лучше всего разместить рядом с местом, где они появятся. Если вам нравится, можно поместить их в пустой сектор, но, наверное, самое лучшим местом для них будет сектор, где они и должны появиться (особенно, если вы пользуетесь [[Doom Builder]], в котором нет автопереноса полиобъектов в точку появления в 3D-режиме). Для простоты в этом примере я разместил их в пустом секторе. Обратите внимание, что полиобъекты - твердые колонны, состоящие только из односторонних линий. <br><br> Линии, помеченные желтым, должны иметь спецификатор <tt>[[Polyobj_StartLine]]</tt>, который принимает три аргумента: номер полиобъекта, номер полиобъекта-зеркала и звук, издаваемый при движении (определяется в [[SNDSEQ]]). Верхний полиобъект должен иметь номер 0, нижний - 1 (подойдет любое число от 0 до 255). Так как эти полиобъекты должны "отражать" движения друг друга (полиобъект1 должен открываться направо, а полиобъект0 должен открываться налево), то в поле "зеркало" нужно ставить номер противоположного полиобъекта. Звук нам пока не важен, поэтому пусть останется 0. </td></tr> <tr><td><center> [[Image:Poly03.png]] </center></td><td> Далее нужно разместить якоря полиобъектов и точки появления. Они определяют, где полиобъект фактически будет размещен на карте (то есть, куда ZDoom перенесет их при запуске карты). Сначала поместим на карту якори, они имеют [[DoomEdNum]] 9300. Они должны находиться внутри полиобъектов (или близко к их краям), как показано на картинке. Важный параметр якоря - угол, значение этого параметра должно быть равно номеру полиобъекта. То есть якорь сверху должен иметь угол 0, а якорь внизу - 1. </td></tr> <tr><td><center> [[Image:Poly04.png]] </center></td><td> Следующим пунктом мы расставим точки появления. Это делается похоже на якори: в точках, где полиобъекты должны появиться в игре относительно якоря. То есть мысленно переносим полиобъекты вместе с их якорями в нужное место и ставим точки появления там, где оказались якори. Точки появления имеют [[DoomEdNum]] 9301 и 9302, если полиобъект должен наносить ущерб прищемлением. </td></tr> <tr><td><center> [[Image:poly05.png]] </center></td><td> Теперь начинается сама хитрая и самая важная часть. Каждый полиобъект должен появляться в собственном [[субсектор]]е. Даже если вы не знаете, что это такое, это не сильно помешает при создании полиобъектов. В общем неплохо делать так, чтобы каждый полиобъект был в отдельном секторе или разместить линию между ними (как в нашем примере). Кроме того, субсектор, в котором появится полиобъект, должен быть выпуклым. А чтобы субсектор (или сектор) был выпуклым, он должен быть похож на круг или квадрат. Думаю, в чуть более научных терминах выпуклость означает, что любую точку фигуры можно соедить с любой другой точки фигуры (но не на том же отрезке) не пересекая других ее линий. Впрочем, если размещать полиобъекты в прямоугольных секторах, то проблем не должно возникнуть. Обратите внимание, на изменения, которые я произвел на карте. Добавлены "отводы" там, куда будут смещать полиобъекты, что предотвратит их смещение в пустоту и не позволит им просачиваться (что было бы самым худшим). </td></tr> <tr><td><center> [[Image:Poly06.png]] </center></td><td> Наконец, полиобъекты должны открываться. Это делается очень просто: широкие бока полиобъекта должны иметь спецификатор <tt>[[Polyobj_DoorSlide]]</tt> и аргументы 0, 32, 128, 64, 105 (номер полиобъекты, скорость, направление ([[байтовый угол]]) и расстояние перемещения) и время задержки перед возвращением назад (в тиках, 105 - 3 секунды*35 тиков в секунде). О полиобъекте 1 беспокоиться не нужно, так как он отражает действия полиобъекта 0. Вот и всё! </td></tr> </table> <center>[[Image:Polyexample.zip|Пример (729 байт)]]</center> ----- См. также: * [[Polyobj DoorSlide]] * [[Polyobj RotateLeft]] * [[Polyobj OR RotateLeft]] * [[Polyobj RotateRight]] * [[Polyobj OR RotateRight]] * [[Polyobj StartLine]] * [[Polyobj DoorSwing]] * [[Polyobj Move]] * [[Polyobj OR Move]] * [[Polyobj MoveTimes8]] * [[Polyobj OR MoveTimes8]] * [[Polyobj ExplicitLine]] {{zdoomwikibased2|PolyObjects}}
Шаблон:Zdoomwikibased2
Возврат к странице
Полиобъекты
.
Просмотры
Статья
Обсуждение
Просмотр
История
Личные инструменты
Представиться системе
Навигация
Заглавная страница
Сообщество
Текущие события
Свежие правки
Случайная статья
Справка
Поиск
Инструменты
Ссылки сюда
Связанные правки
Загрузить файл
Спецстраницы