<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://doomdev.idkfa.ru/wiki/skins/common/feed.css?164"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://doomdev.idkfa.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D1%84%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5</id>
		<title>Скриптовое фазированное освещение - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://doomdev.idkfa.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D1%84%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5"/>
		<link rel="alternate" type="text/html" href="http://doomdev.idkfa.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D1%84%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5&amp;action=history"/>
		<updated>2026-04-08T08:35:08Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.13.3</generator>

	<entry>
		<id>http://doomdev.idkfa.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D1%84%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=2174&amp;oldid=prev</id>
		<title>Costja в 19:19, 5 июня 2006</title>
		<link rel="alternate" type="text/html" href="http://doomdev.idkfa.ru/wiki/index.php?title=%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D1%84%D0%B0%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D1%81%D0%B2%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=2174&amp;oldid=prev"/>
				<updated>2006-06-05T19:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Изображение:Sphaslit1.jpg|frame|center|Рисунок 1: Скриптовое освещение]]&lt;br /&gt;
&lt;br /&gt;
Освещение в ZDoom сделано лучше, чем в любом другом порте, а фазированное (движущееся) освещение позволяет значительно улучшить вид любого уровня. Однако, оно не всегда поддается желаемой настройке. Этот урок показывает, как написать скрипт, создающий освещение, сходное с фазированным, и обеспечивающий полный контроль над освещением. На уровне-примере [http://zdoom.org/zdkb/sectlite.zip sectlite.zip] есть комната, показанная на рисунке 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Sphaslit2.gif|frame|center|/##&amp;lt;br&amp;gt;&lt;br /&gt;
Sector1 = Сектор 1&amp;lt;br&amp;gt;&lt;br /&gt;
Sector 17 = Сектор 17&amp;lt;br&amp;gt;&lt;br /&gt;
Switches = Выключатели&amp;lt;br&amp;gt;&lt;br /&gt;
##/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рисунок 2: План карты]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 показан план карты. Сектора имеют значение поля tag от 1 до 17 в порядке возрастания. Использование значений tag в порядке возрастания значительно упрощает написание скриптов.&lt;br /&gt;
&lt;br /&gt;
В комнате находится два выключателя. Первый включает фазированное освещение, движущееся в одном направлении, другой – в противоположном. Можно сделать то же самое и при помощи одного выключателя, добавив в скрипт переменную-флаг, чтобы знать, в каком состоянии находится выключатель в каждый конкретный момент.&lt;br /&gt;
&lt;br /&gt;
 #include “zcommon.acs”&lt;br /&gt;
  &lt;br /&gt;
 #define faderate 24&lt;br /&gt;
 #define lowlight 120&lt;br /&gt;
 #define highlight 200&lt;br /&gt;
 #define lastsector 17&lt;br /&gt;
 #define firstsector 1&lt;br /&gt;
 #define lightdelay 5&lt;br /&gt;
  &lt;br /&gt;
 //Выполняющийся в данный момент скрипт.&lt;br /&gt;
 int ldir;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
 script 1 (int dir)&lt;br /&gt;
 {&lt;br /&gt;
         inti;&lt;br /&gt;
  &lt;br /&gt;
         //Завершить выполняющийся скрипт.&lt;br /&gt;
         if (ldir &amp;gt; 0) ACS_Terminate (ldir, 0);&lt;br /&gt;
  &lt;br /&gt;
         //Установить одинаковый уровень яркости для всех источников света.&lt;br /&gt;
         for (i=firstsector; i&amp;lt;lastsector; i++)&lt;br /&gt;
                Light_ChangeToValue (i, lowlight);&lt;br /&gt;
  &lt;br /&gt;
         if (dir == 0) &lt;br /&gt;
                ACS_Execute (2, 0, 0, 0, 0);&lt;br /&gt;
         else&lt;br /&gt;
                ACS_Execute (3, 0, 0, 0, 0);&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 script 2 (void)&lt;br /&gt;
 {&lt;br /&gt;
         int i;&lt;br /&gt;
  &lt;br /&gt;
         ldir = 2;&lt;br /&gt;
  &lt;br /&gt;
         //tag первого сектора.&lt;br /&gt;
         if (i==0) i = firstsector;&lt;br /&gt;
  &lt;br /&gt;
         //Уменьшить яркость текущего сектора.&lt;br /&gt;
         Light_Fade (i, lowlight, faderate);&lt;br /&gt;
  &lt;br /&gt;
         //Перейти к следующему tag-у.&lt;br /&gt;
         i++;&lt;br /&gt;
  &lt;br /&gt;
         //Зациклить.&lt;br /&gt;
         if (i&amp;gt;lastsector) i = firstsector;&lt;br /&gt;
  &lt;br /&gt;
         //Сделать ярким освещение следующего сектора.&lt;br /&gt;
         Light_ChangeToValue (i, highlight);&lt;br /&gt;
                &lt;br /&gt;
         Delay (lightdelay);&lt;br /&gt;
         Restart;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 script 3 (void)&lt;br /&gt;
 {&lt;br /&gt;
  &lt;br /&gt;
         int i;&lt;br /&gt;
  &lt;br /&gt;
         ldir = 3;&lt;br /&gt;
  &lt;br /&gt;
         //tag первого сектора.&lt;br /&gt;
         if (i==0) i = lastsector;&lt;br /&gt;
  &lt;br /&gt;
         //Уменьшить текущую яркость.&lt;br /&gt;
         Light_Fade (i, lowlight, faderate);&lt;br /&gt;
  &lt;br /&gt;
         //Перейти к следующему tag-у.&lt;br /&gt;
         i--;&lt;br /&gt;
  &lt;br /&gt;
         //Зациклить.&lt;br /&gt;
         if (i&amp;lt;firstsector) i = lastsector;&lt;br /&gt;
  &lt;br /&gt;
         //Сделать ярким освещение следующего сектора.&lt;br /&gt;
         Light_ChangeToValue (i, highlight);&lt;br /&gt;
                &lt;br /&gt;
         Delay (lightdelay);&lt;br /&gt;
         Restart;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
Рисунок 3: Скрипт&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на использование определений в начале скрипта. Определения могут намного упростить написание скриптов и делают их намного удобнее для чтения. Если понадобится изменить одно из значений в скрипте, нужно будет лишь изменить значение в определении, а не искать его по всему скрипту. Кроме того, понять, что делает скрипт, довольно легко, читая его и видя определения, написанные обычным языком.&lt;br /&gt;
&lt;br /&gt;
В этом скрипте были использованы те же два спецификатора освещения, что и в других скриптах, поэтому они должны быть вам знакомы.&lt;br /&gt;
&lt;br /&gt;
Скрипт 1 активируется одним из выключателей. Значение параметра '''dir''' указывает, в каком направлении должен двигаться свет. Сначала скрипт 1 сбрасывает уровни освещения на текущее значение по умолчанию (120). Далее он завершает все работающие скрипты (кроме себя), используя значение, хранимое в переменной '''ldir'''. Затем в зависимости от того, какое направление указано в параметре '''dir''', запускает скрипт 2 или 3.&lt;br /&gt;
&lt;br /&gt;
Скрипты 2 и 3 делают совершенно тоже самое, но в противоположных направлениях. Скрипт просто проходит по секторам, постепенно приближая яркость сектора, имеющего текущее значение поля '''tag''' (i), к значению по умолчанию, а затем переходит к следующему сектору (i—или i++) и увеличивает яркость его освещения до максимального. Он создает эффект хвоста света, бегущего по секторам. И скрипт 2, и скрипт 3 работают постоянно с момента активации, пока не будут завершены скриптом 1.&lt;br /&gt;
&lt;br /&gt;
Почему используется два скрипта? Для того, чтобы один скрипт мог быть завершен, а другой – запущен. Я не могу завершить и запустить скрипт одной командой, хотя возможно существует неизвестный мне способ. Однако этот подход работает достаточно хорошо.&lt;br /&gt;
&lt;br /&gt;
Фазированное освещение, созданное при помощи приведенных скриптов, отличается от встроенного фазированного освещения (хотя реализовать его можно при помощи более сложного скрипта), но эти скрипты обеспечивают полный контроль, а созданное с их помощью фазированное освещение, выглядит, как минимум достаточно привлекательно, чтобы включить его в любой уровень ZDoom.&lt;br /&gt;
&lt;br /&gt;
{{RCTutorial}}&lt;/div&gt;</summary>
		<author><name>Costja</name></author>	</entry>

	</feed>