Я наконец-то разобрался с полиобъектами! Нижеследующая информация окажется полезной для тех, кто тоже решил с ними разобраться. Так как пособие по полиобъектам по непонятным мне лично причинам отсутствовало, то я решил создать его сам.
Общая схема создания полиобъекта:
1. Рисуется сектор, где должен быть полиобъект.
2. Рисуется буферный сектор, где строится будущий сектор-полиобъект.
3. Одной из линий полиобъекта задаётся функция Polyobject_startline, в ней прописывается номер полиобъекта, номер полиобъекта-зеркала (если он планируется, далее по желанию - номер звука и таг линии.
4. В пределах полиобъекта ставится Polyobject anchor. В поле "угол" указывается номер полиобъекта (фактически это таг).
5. И наконец, на нужное место в игровом секторе ставится Polyobject spawn, для которого также указывается таг полиобъекта в поле "угол".
Если полиобъект не является простым по форме, то всем линиям, кроме стартовой нужно указать функцию Polyobject_Explicit line, а в ней по порядку от стартовой линии прописать номерами порядок прорисовки в поле "Rendering order".
Движущийся полиобъект:
Задать полиобъекту функцию Polyobject_move(номер полиобъекта,скорость,байтовый угол (это направление движения),расстояние). Расстояние любого движения всегда отсчитывается от точки Polyobject anchor.
Байтовые углы:
0 градусов = 0 - вправо
45 градусов = 32 - вправо-вверх
90 градусов = 64 - вверх
135 градусов = 96 - влево-вверх
180 градусов = 128 - влево
225 градусов = 160 - влево-вниз
270 градусов = 192 - вниз
315 градусов = 224 - вправо-вниз
Polyobj_MoveTimes8 - то же, но указанное расстояние умножается на 8 (например, задано расстояние 20, реальным же будет 160).
Polyobj_OR_Move и Polyobj_OR_MoveTimes8 - то же, что и выше, но движение невозможно прервать.
Polyobj_DoorSlide - движение с возвращением. Дополнительно указывается задержка до возвращения в исходное состояние.
Поворот полиобъекта:
Задать полиобъекту функцию Polyobj_RotateLeft/Right(номер полиобъекта,скорость,байтовый угол) - поворот влево/вправо. Если задать угол 255, то вращение не остановится.
Polyobj_DoorSwing - поворот и возвращение. Дополнительно указывается задержка до возвращения в исходное состояние.
Polyobj_OR_RotateLeft и Polyobj_OR_RotateRight - поворот без возможности прерывания.
Это самые общие инструкции, если у кого-то есть чем дополнить, пишите. Также прикладываю карту-пример (она под GZdoom Hexen).Добавлено (2013-03-24, 17:05:59)
---------------------------------------------
Подробнее о байтовых углах:
Меры байтовых углов отличаются от привычных нам. 0 - это привычная нам точка отсчёта по единичной окружности. Каждое
следующее опорное значение (45, 90, 135, 180, 225, 270, 315 и снова 0)
получается, если к предыдущему значению прибавить 32. Для 45 градусов
это как раз 32, для 90 - 64 и т. д. Очевидно, что если захотеть двигаться более плавно/чётко, то придётся
искать более мелкие доли. Если 90 градусов = 64 в байтах, то 1 градус =
64/90 = 32/45 байтовых градуса. Doom Builder при задании функций
объектам воспринимает только целые числа, так что нужно будет работать
через скрипты.
Добавлено (2013-03-25, 10:29:14)
---------------------------------------------
Наверняка рано или поздно (заранее надеюсь, что рано!) настаёт счастливый момент, когда карта готова. Всё проверено на работоспособность, отловлены и исправлены все возможные глюки, готовый файл карты пылится на жёстком диске. Конечно, можно переигрывать уровень раз за разом, но автору это, как правило, неинтересно (ещё бы! Он же всё в ней знает!). Тогда встаёт вопрос о публикации. Сейчас я попытаюсь рассказать о том, как сделать это правильно. В wad-файле оригинальной игры есть файл MAPINFO. Именно в этом файле хранится заголовочная информация о картах. На сайте http://doomdev.idkfa.ru я нарыл хорошее и подробное пособие по MAPINFO - http://doomdev.idkfa.ru/wiki/index.php/MAPINFO. Я пользуюсь им и сам.