<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог одиноко стоящего игрока вспышки &#187; AS2.0</title>
	<atom:link href="http://murejib.com/tag/as20/feed/" rel="self" type="application/rss+xml" />
	<link>http://murejib.com</link>
	<description>flash, actionscript, animation, анимация</description>
	<lastBuildDate>Sat, 31 Mar 2012 12:15:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Умные колеса.</title>
		<link>http://murejib.com/2009/04/24/smart-wheels/</link>
		<comments>http://murejib.com/2009/04/24/smart-wheels/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:09:57 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[анимация]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[useful]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=169</guid>
		<description><![CDATA[Сейчас я работаю над одним весьма интересным проектом — это будет всего лишь интерактивная  флеш-шапка, но она будет полна анимации с алогичным волшебством: кони-рыбы, люди-фрукты и так далее )) В процессе работы, я уверен, будет накапливатся масса интересных и полезных мелочей, коими я конечно же поспешу поделиться. Сейчас таких мелочей есть две: программный растеризатор сложного [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас я работаю над одним весьма интересным проектом — это будет всего лишь интерактивная  флеш-шапка, но она будет полна анимации с алогичным волшебством: кони-рыбы, люди-фрукты и так далее ))</p>
<p>В процессе работы, я уверен, будет накапливатся масса интересных и полезных мелочей, коими я конечно же поспешу поделиться. Сейчас таких мелочей есть две: программный растеризатор сложного вектора. Вектора будет много, и он как пить дать убъет процессор; пришлось выдумывать хитрые вещи. Но об этом позже, сначала я должен убедиться в эффективности выбранного решения ))</p>
<p>Сегодня же я расскажу о колесах. Будет скрипт )) Несложный, но он даст нам чудное колесо, и оно будет вращаться в точности в соответсвии с тем, как далеко продвигается то, к чему это колесо крепится ))) Итак, под кат, там есть небольшой мультик ))<br />
<span id="more-169"></span><br />
 </p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_horse_blog_1856654760"
			class="flashmovie"
			width="400"
			height="300">
	<param name="movie" value="http://murejib.com/flash/smartWheels/horse_blog.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://murejib.com/flash/smartWheels/horse_blog.swf"
			name="fm_horse_blog_1856654760"
			width="400"
			height="300">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Оставим пока лошадей ) (Я намерен, кстати выложить видео запись процесса работы над этой анимацией &#8211; так сказать серия Animator at work)<br />
Понаблюдайте за каретой. Колеса, как видите вращаются весьма правильно )) Они следуют всем законам земным и божеским. Вы думаете, я сидел с линейкой и мерял кадр за кадром &#8211; каково смещение? Нет. Я вспомнил, что в школе я неплохо разбирался в геометрии ))<br />
Итак, каждое колесо запаковано в мувиКлип, сама карета с ее вложенной анимацией также упакавана в мувиклип.<br />
Каждый клип колеса имеет точку регистрации ровно в его центре, чтобы колесо вращалось вокруг своей оси.<br />
Из геометрии мы знаем формулу длины окружности L = 2PI*R, где  R &#8211; радиус.<br />
В правильном колесе радиус &#8211; это половина ширины клипа.<br />
Рассуждаем логически: когда наше колесо повернется на 360 градусов, оно должно сместиться на расстояние  L. Супер! Значит, если колесо повернется на один градус, расстояние будет равно  L/360! Запомним это число,  и повесим на колесо событие onEnterFrame в котором смотрим — на сколько сместилась карета (моушвтины тоже считаются!), и считаем угол поворота &#8211; дистанцию делим на L/360. Вуаля.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">init<span style="color: #66cc66;">&#40;</span>wheel1<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// обучаем первое колесо</span>
init<span style="color: #66cc66;">&#40;</span>wheel2<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// обучаем второе колесо</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #66cc66;">&#40;</span>mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
<span style="color: #66cc66;">&#123;</span>
	mc.<span style="color: #006600;">radius</span> = mc.<span style="color: #0066CC;">_width</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">2</span>; <span style="color: #808080; font-style: italic;">// собрали радиус</span>
	mc.<span style="color: #006600;">baseX</span> = mc.<span style="color: #0066CC;">_parent</span>.<span style="color: #0066CC;">_x</span>; <span style="color: #808080; font-style: italic;">// запомнили начальную позицию кареты</span>
	<span style="color: #808080; font-style: italic;">// l = 2PI*R - ах, геометрия...</span>
&nbsp;
	mc.<span style="color: #006600;">degreeLength</span>  = <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">3.1415926</span><span style="color: #66cc66;">*</span>mc.<span style="color: #006600;">radius</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">360</span>; <span style="color: #808080; font-style: italic;">// смещение при повороте на один градус</span>
	mc.<span style="color: #0066CC;">onEnterFrame</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> distance:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">this</span>.<span style="color: #006600;">baseX</span> - <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_parent</span>.<span style="color: #0066CC;">_x</span>; <span style="color: #808080; font-style: italic;">// на сколько сместилась карета?</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">_rotation</span> = -distance<span style="color: #66cc66;">/</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">degreeLength</span>; <span style="color: #808080; font-style: italic;">// поворачиваем колесо</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<img src="http://murejib.com/?ak_action=api_record_view&id=169&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2009/04/24/smart-wheels/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ScrollRect. Дубль 2.</title>
		<link>http://murejib.com/2008/04/24/scrollrect-2/</link>
		<comments>http://murejib.com/2008/04/24/scrollrect-2/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 08:21:40 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[useful]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=47</guid>
		<description><![CDATA[Как показывает практика, многие избегают использования scrollRect (я писал об этой чудесной возможности в одной из статей) по той простой причине, что не понимают, как работать с координатами. Действительно, после использования маски с клипом, где каждый участник процесса имеет свои понятные иксы и игреки, переход на scrollRect бывает труден. Сегодня я еще раз попробую обратить [...]]]></description>
			<content:encoded><![CDATA[<p>Как показывает практика, многие избегают использования scrollRect (я писал об этой чудесной возможности <a title="scrollRect vs. setMask" href="http://murejib.com/?p=23">в одной из статей</a>) по той простой причине, что не понимают, как работать с координатами. Действительно, после использования маски с клипом, где каждый участник процесса имеет свои понятные иксы и игреки, переход на scrollRect бывает труден.</p>
<p>Сегодня я еще раз попробую обратить вас в свою веру  )).</p>
<p><span id="more-41"></span><br />
Основная, бесспорная причина, по которой стоит использовать scrollRect вместо прямоугольных масок &#8211; производительность.<br />
10 масок убьют CPU намного быстрее, чем 10 scrollRect-ов. Даже в хелпе сказано, что при использовании scrollRect используется попиксельное копирование участка клипа, а не полная его перерисовка.<br />
Вторая причина &#8211; (вытекает из первой) можно маскировать НЕ внедренные шрифты, которые, как мы знаем, пропадают при маскировании обычным способом.</p>
<p>Также для меня лично плюсом является то, что мне не надо плодить новые клипы, только для того чтобы замаскировать контент.</p>
<p>Теперь о том, как это работает.</p>
<p>В процессе участвует MovieClip и объект Rectangle.<br />
Когда к клипу применяется scrollRect &#8211; то на экран выводится только тот участок клипа, который КАК бы лежит под заданным прямоугольником. Координаты прямоугольника при этом задаются в системе координат маскируемого клипа &#8211; то есть от его точки регистрации. Хотим увидеть квадрат 20х20 левого верхнего угла клипа &#8211; задаем<br />
<code>mc.scrollRect = new Rectangle(0,0,20,20);</code></p>
<p>Заметьте, если вы начинаете сдвигать координату прямоугольника &#8211; координаты клипа <strong>остаются неизменными</strong>, хотя визуально кажется, будто он движется под маской. Еще раз напомню &#8211; <strong>происходит попиксельное копирование участка клипа.</strong></p>
<hr />Пример 1. Левый клип замаскирован scrollRect-ом. Перемещая рамку над правым &#8211; меняем x и y scrollRect-а.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_nav_1667813191"
			class="flashmovie"
			width="450"
			height="180">
	<param name="movie" value="/flash/nav.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/nav.swf"
			name="fm_nav_1667813191"
			width="450"
			height="180">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p> </p>
<hr />Пример 2. Прокрутка большого клипа в окне заданного размера.<br />
Координаты Rectangle изменяются в зависимости от координат мыши.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_sr_655350818"
			class="flashmovie"
			width="300"
			height="300">
	<param name="movie" value="/flash/sr.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/sr.swf"
			name="fm_sr_655350818"
			width="300"
			height="300">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p> </p>
<hr />Пример 3. Комбинация перемещения клипа + перемещение scrollRect дает забавный эффект.<br />
Попробуйте перевесить картину )<br />

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_frame_2011307635"
			class="flashmovie"
			width="450"
			height="357">
	<param name="movie" value="/flash/frame.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/frame.swf"
			name="fm_frame_2011307635"
			width="450"
			height="357">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p> </p>
<hr />Пример 4. Покрутите ручки сами.Некоторые свойства <em>Rectangle</em>:</p>
<p> </p>
<p><strong>x, y</strong> &#8211; координата левого верхнего угла прямоугольника;<br />
<strong> width, heigth</strong> &#8211; ширина, высота прямоугольника;<br />
<strong> left</strong> &#8211;  координата левой стороны. Изменяя это свойство мы меняем сразу и<strong> width</strong>, и <strong>x</strong>;<br />
<strong> right</strong> -координата правой стороны. Изменяя это свойство мы изменяем также и <strong>width</strong>;<br />
<strong> top</strong> &#8211;  координата верхней стороны. Изменяя это свойство мы меняем сразу и <strong>height</strong>, и <strong>y</strong>;<br />
<strong> bottom</strong> -координата нижней стороны. Изменяя это свойство мы изменяем также и <strong>height</strong>;Покрутив ручки <em>MovieClip</em> вы увидите разницу между перемещением клипа и перемещением прямоугольника scrollRect.<br />
Интересный факт. Изменяя <strong>width</strong> прямоугольника мы меняем <strong>_width</strong> клипа (это логично). Но если мы при scrollRect начнем изменять непосредственно <strong>_width (_height)</strong> клипа &#8211; то клип начнет искажаться, тогда как scrollRect останется при своем<strong> _width.</strong><br />
Крутите ручки &#8211; экспериментируйте.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_sliders_464456372"
			class="flashmovie"
			width="450"
			height="620">
	<param name="movie" value="/flash/sliders.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/sliders.swf"
			name="fm_sliders_464456372"
			width="450"
			height="620">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<img src="http://murejib.com/?ak_action=api_record_view&id=41&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/04/24/scrollrect-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Разбираемся с SWFAddress</title>
		<link>http://murejib.com/2008/02/26/swfaddress/</link>
		<comments>http://murejib.com/2008/02/26/swfaddress/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 11:37:03 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[deep linking]]></category>
		<category><![CDATA[swfaddress]]></category>
		<category><![CDATA[traps]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=41</guid>
		<description><![CDATA[В сети море полезных фреймворков, классов и решений различных задач. Однако очень многие из них имеют существенный недостаток &#8211; УЖАСНАЯ, если вообще присутствующая документация. Недавно я прикоснулся к магии SWFAddress, библиотеке AS+JS, решающей проблему deep linking для FLASH и AJAX. Для таких как я (гуманитариев и не-программистов) предлагаю свой опыт по освоению СВФАдреса. Нет. Документацию [...]]]></description>
			<content:encoded><![CDATA[<p>В сети море полезных фреймворков, классов и решений различных задач.<br />
Однако очень многие из них имеют существенный недостаток &#8211; УЖАСНАЯ, если вообще присутствующая документация.</p>
<p>Недавно я прикоснулся к магии SWFAddress, библиотеке AS+JS, решающей проблему deep linking для FLASH и AJAX.<br />
Для таких как я (гуманитариев и не-программистов) предлагаю свой опыт по освоению СВФАдреса.<br />
<span id="more-36"></span> Нет. Документацию на русский язык я переводить не буду. Не вижу в этом смысла. Документация более чем минималистическая. С тем же успехом ее можно было бы вообще не писать. В прочем + от нее все же есть &#8211; сводная таблица всех доступных в классе методов.</p>
<p>Первое что следует сделать &#8211; это скачать библиотеку. Настоятельно рекомендую качать <a href="http://asual.com/download/?swfaddress">7-мегабайтовый архив</a> с примерами и документацией.  Потому что, как выяснилось в процессе, если бы я ограничился скачиванием только классов — меня бы постигла неудача, и я бы так и не понял в чем дело. А непоняток-ошибок на пути встретилось некоторое количество )</p>
<p><strong>Первая ошибка.</strong> Исторически сложилось так, что я работал над сайтом, к которому намеревался прикрутить SWFAddress на завершающем этапе.  <em>Собираетесь использовать дип линкинг &#8211; сразу работайте с SWFAddress</em>. Дело в том, что любое изменение адресной строки браузера (А это именно то, зачем нам вообще нужен дип линкинг) вызывает событие SWFAddress.onChange. То есть фактически и переключение разделов из флеш сайта (конечно если оно должно вести к изменению в адресной строке) , и переключение разделов извне (навигация по кнопкам ВПЕРЕД НАЗАД ,навигация по якорям на хтмл-странице и т.д.) вызывает это событие. В сущности на нем как раз и будет строиться обработка события переключения между разделами.<br />
<strong>Ошибка вторая.</strong> Я доверился заявлению <em>Flash CS3 Support</em>. Фактически же, если публиковать ролик на странице с помощью AC_RunActiveContent.js, которое генерируется Flash IDE &#8211; дип линкинг не работает. Изменения в адресной строке &#8211; да, но ролик не реагирует на навигацию из браузера. Я дошел до этого знания случайно. Потеряв веру в свой мозг, я просто взял рабочий пример, и заменил в нем флешку на свою &#8211; и все заработало. Путем исключений я нашел камень преткновения. Каким то образом AC_RunActiveContent.js из примера отличается от того, что генерируется FLASH CS3 IDE. Так что пользуйтесь скриптом из примеров. Что касается работы с SWFObject и UFO &#8211; не проверял. У вас есть отличная возможность сделать это за меня, а потом отписаться здесь, если пожелаете.</p>
<p>Теперь о некоторых тонкостях и внутренностях. В архиве есть коды для всех трех версий AS. Мои опыты ставились на AS2.0</p>
<p>1. Класс написан как TopLevel-класс, или для тех кто не понимает этого словосочетания, &#8211; он не создает экземпляров. Пример такого класса -Math, все функции в нем вызываются подобным образом: Math.sin(), Math.round() и т.д. То же справедливо и для SWFAddress.</p>
<p>2. Адресная строка.<br />
Для решения задачи дип линкинга, к существующему URL добавляется якорь # за которым следует строка, которую разработчик волен генерить сам, по своим правилам, и сам же по своим правилам ее  и разбирает. Есть два режима. setStrict(true) &#8211; в конце адреса жестко добавляется слеш (/) и setStrict(false) &#8211; никаких слешей без ведома разрабочика.</p>
<p>3. Основные полезные методы.<br />
В классе присутствует набор методов для разбора строки. Весьма удобно.<br />
К примеру в адресной строке имеем</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://flashsite.com/#news?page=&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getValue():String -</strong> вернет значение строки аккурат после # со всеми Вашими изысками (парами имя=значение)</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">news?page=1&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getPath():String -</strong> вернет значение строки аккурат после # без дополнительных параметров<br />
<em>news</em></p>
<p><strong>SWFAddress.getQueryString():Array -</strong> вернет строку с дополнительными параметрами</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">page=1&amp;img=2</pre></div></div>

<p><strong>SWFAddress.getParameterNames():Array -</strong> вернет массив с именами дополнительных переменных<br />
<em>page,img</em></p>
<p><strong>SWFAddress.getParameter(value:String):String -</strong> вернет значение дополнительного параметра указанного в value<br />
<em>getParameter(&#8220;page&#8221;) // 1;<br />
</em><em>getParameter(&#8220;img&#8221;) // 2;<br />
</em></p>
<p>Для того чтобы изменить адресную строку из FLASH существует метод <strong>setValue(value:String) &#8211; </strong>помните, что вызов этого метода автоматически приведет к вызову события onChange, так что фактически переключение между разделами сводится к замене значения адресной строки и последующей обработке события.</p>
<p>Остальные методы описывать не стану, они весьма просты и даже данных документации хватит для их освоения.</p>
<p>4. События.<br />
Я уже говорил о событии onChange. Должен отметить, что событие это вызывается сразу же, при первом же упоминании класса, равно как и событие onInit. Большого смысла в событии onInit я не уловил. В самом начале оно вызывается и тут же за ним вызывается onChange. Возможно есть смысл для более четкой структуризации, и отделении инит-процедур от собственно обработки переключений между разделами.</p>
<p>Более подробно поговрим о событии onChange, хотя в случае с onInit все работает абсолютно так же, за исключением значения cвойств SWFAddressEvent: path=null; value=null; type=init;</p>
<p>События доступны в двух ипостасях:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">SWFAddress.<span style="color: #006600;">onChange</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SWFAddress.onChange&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>В данном случае мы просто определяем статичную функцию onChange.</p>
<p>Второй вариант &#8211; подписать любой свой объект на событие. Во многом это удобнее, чем описывать вложенные функции с обработчиком события.<br />
К примеру мне удобно подписать экземпляр класса, который напрямую работает с SWFAddress. Для этого я сначала создаю функцию обработчик:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onChange<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> \
<span style="color: #66cc66;">&#123;</span>
   <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Class's onChange&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>И далее подписывась на событие с помощью метода класса  SWFAddress  &#8211; addEventListener(type:String,listener:Function);<br />
Поскольку в этом учавствует стандартный mx.utils.EventDispatcher, нужно подписаться так, чтобы наша функция onChange знала кто в доме хозяин &#8211; то есть надо жестко определить this. Делается это при помощи mx.utils.Delegate.create().<br />
Итак подписка на событие для нашего экземпляра будет выглядеть так</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">SWFAddress.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;change&quot;</span>,Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,onChange<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Теперь мы можем из тела функции onChange обращаться ко всем свойствам и методам нашего экземпляра. Ура.<br />
Продвинемся дальше. В том случае, если мы подписываемся на событие, в качестве параметра в наш обработчик приходит экземпляр SWFAddressEvent, который несет в себе ценную информацию <img src='http://murejib.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Модифицируем наш обработчик.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onChange<span style="color: #66cc66;">&#40;</span>evt:SWFAddressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #808080; font-style: italic;">//вернет путь после # из адресной строки БЕЗ параметров</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;path:&quot;</span>+evt.<span style="color: #006600;">path</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #808080; font-style: italic;">//вернет  путь после # из адресной строки С параметрами</span>
  <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;value:&quot;</span>+evt.<span style="color: #006600;">value</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Также событие несет информацию о своем типе (type=&#8221;change&#8221; или &#8220;init&#8221;), target (это всегда отсылка на SWFAddress) а также массив parameters (&#8220;ассоциативный&#8221;)   с параметрами из queryString. Если в адресной строке есть news?param=value, то значение param можно получить так : SWFAddressEvent.parameters.param</p>
<p>Какие замечены баги.</p>
<p>1. Самый неприятный. В опере любое переключение между страницами ИЗ браузера (навигация вперед назад, якоря) вызывает полную перезагрузку страницы. Не очень то красиво, особенно если это флеш сайт с какими то особенными переходами между страницами. К счастью внутренние флешовые переходы проходят как обычно.</p>
<p>2.Если вручную вставить адрес в браузерной строке в FireFox &#8211; адресная строка перестает изменяться, когда переключаешься между разделами. Вроде как адреса заносятся в history, навигация вперед.назад работает,  но это не отображается в адресной строке. В принципе &#8211; я лично замечал вообще странное поведение адресной строки в Фоксе, и без дип линкинга, например иногда в ней просто невозможно перенабрать адрес.</p>
<p>Работоспособность проверена на:</p>
<ul>
<li>Mozzilla FireFox 2.0.0.12</li>
<li>Opera 9.10</li>
<li>IE 6.0</li>
<li>Safari (win) 3.0.3</li>
</ul>
<p>В завершении могу только дать ссылку на первый свой опыт с SWFAddress, где вы можете потестировать работоспособность библиотеки в разных браузерах. Будет полезно, если здесь вы запостите свои баг репорты, ну или зададите вопросы о том, что осталось непонятным. Цель этого топика &#8211; сделать эту бесспорно полезную опцию более доступной всем категориям разработчиков )) Поэтому -включайтесь )</p>
<p><a href="http://kvadra.net/samples/goodpeople/_flash/#chillout/two?pgid=2t&#038;imgid=36">http://kvadra.net/samples/goodpeople/_flash/#chillout/two?pgid=2t&#038;imgid=36 </a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=36&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/02/26/swfaddress/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>_quality = LOW. Производительность против дизайна.</title>
		<link>http://murejib.com/2008/02/06/_quality-low/</link>
		<comments>http://murejib.com/2008/02/06/_quality-low/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:02:38 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[NB]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=39</guid>
		<description><![CDATA[Самое мое любимое качество &#8211; LOW. Очень быстро, но смертельно для вектора. В некоторых случаях, можно с легкостью пользоваться этим чудным режимом, оставляя за собой право на гладкие линии)) Рецепт прост. Если мы имеем дело со статичным вектором, то мы можем сделать с него слепок в битмапДату при режиме _quality=&#8221;HIGH&#8221;, а затем переключиться на LOW [...]]]></description>
			<content:encoded><![CDATA[<p>Самое мое любимое качество &#8211; LOW. Очень быстро, но смертельно для вектора.</p>
<p>В некоторых случаях, можно с легкостью пользоваться этим чудным режимом, оставляя за собой право на гладкие линии))<br />
Рецепт прост. Если мы имеем дело со статичным вектором, то мы можем сделать с него слепок в битмапДату при режиме _quality=&#8221;HIGH&#8221;, а затем переключиться на LOW и вывести уже не вектор, а битмапДату. Просто до безобразия.<span id="more-35"></span></p>
<p>Более того, замечено, что текст с типом рендеринга ADVANCED &#8211; не подвластен козням качества LOW.<br />
ПРи должной сноровке, несложно написать класс, который переводил бы нужный вектор в битмап дату.  МОжно даже продумать подобные фокус с анимированными векторами (массив фрейм_в_битмап) Конечно в данном случае больше нагрузки идет на ОЗУ, но в основом именно нагрузка на CPU дает притормаживание.</p>
<p>Пример:</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_qbmp_1418395031"
			class="flashmovie"
			width="450"
			height="200">
	<param name="movie" value="/flash/quality/qbmp.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/quality/qbmp.swf"
			name="fm_qbmp_1418395031"
			width="450"
			height="200">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Код фокуса:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">BitmapData</span>;
<span style="color: #0066CC;">_quality</span>=<span style="color: #ff0000;">&quot;BEST&quot;</span>;
<span style="color: #000000; font-weight: bold;">var</span> bmp:BitmapData = <span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span>oval.<span style="color: #0066CC;">_width</span>,oval.<span style="color: #0066CC;">_height</span>,<span style="color: #000000; font-weight: bold;">true</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
bmp.<span style="color: #006600;">draw</span><span style="color: #66cc66;">&#40;</span>oval<span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">_quality</span> = <span style="color: #ff0000;">&quot;LOW&quot;</span>;
<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mc&quot;</span>,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
mc.<span style="color: #0066CC;">_x</span> = oval.<span style="color: #0066CC;">_width</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">2</span>;
mc.<span style="color: #0066CC;">_y</span> = oval.<span style="color: #0066CC;">_y</span>;
mc.<span style="color: #006600;">attachBitmap</span><span style="color: #66cc66;">&#40;</span>bmp,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Ссылка по теме: <a href="http://www.bytearray.org/?p=117">http://www.bytearray.org/?p=117</a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=35&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/02/06/_quality-low/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BitmapData + mask = мертвый браузер.</title>
		<link>http://murejib.com/2008/02/05/bitmapdata-mask/</link>
		<comments>http://murejib.com/2008/02/05/bitmapdata-mask/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 14:27:11 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[баг]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[NB]]></category>
		<category><![CDATA[traps]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=38</guid>
		<description><![CDATA[Очередной баг браузерного плагина и как с ним бороться ) Некоторые нехитрые действия для создания битмап-картинки, маскированной фигурным контуром вырубили напрочь браузер. Коротко об алгоритме: 1.В библиотеке есть клип для маски (дабы прямоугольный кусок растра оформить в &#8220;фигурный&#8221; контур). 2. Там же, в библотеке, несколько растров с linkageID. 3. Создается временный клип, аттачится маска, временный [...]]]></description>
			<content:encoded><![CDATA[<p>Очередной баг браузерного плагина и как с ним бороться )<br />
Некоторые нехитрые действия для создания битмап-картинки, маскированной фигурным контуром вырубили напрочь браузер.</p>
<p><span id="more-34"></span></p>
<p>Коротко об алгоритме:</p>
<p>1.В библиотеке есть клип для маски (дабы прямоугольный кусок растра оформить в &#8220;фигурный&#8221; контур).<br />
2. Там же, в библотеке, несколько растров с linkageID.<br />
3. Создается временный клип, аттачится маска, временный клип маскируется.<br />
4. Создается временная битмапДата, аттачится во временный клип (Под маско получается картинка &#8220;в рамке&#8221;)<br />
5. Создаем еще одну битмап дату, делаем слепок с маскированного клипа.<br />
6. Заносим полученную битмапу в массив, для дальнейшего использования.<br />
7. Убираем временные клипы, диспоузим временный битмап.</p>
<p>При этих нехитрых действиях, дебаг, стендалон &#8211; работаю как и предполагается.<br />
Браузер (любой) вылетает, сообщив о б ошибке.</p>
<p>Опытным путем, установил, что проблема в маске. И это же навело меня на решение.<br />
Перед тем , как задать маску, нужно и маскируемому, и маскиующему  клипам задать свойство cacheAsBitmap = true. И хотя особоенно логичного объяснения я этому не вижу &#8211; плагин принимает такой вариант.</p>
<img src="http://murejib.com/?ak_action=api_record_view&id=34&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/02/05/bitmapdata-mask/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новое в классе FileReference</title>
		<link>http://murejib.com/2008/01/29/novoe-v-klasse-filereference/</link>
		<comments>http://murejib.com/2008/01/29/novoe-v-klasse-filereference/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 07:29:44 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=36</guid>
		<description><![CDATA[Недавно в блоге GarbageCollector появилась статья о новых событиях класса NetStream. Я в свою очередь ) недавно обнаружил некоторые нововведения и в классе FileReference, впервые появившемся в Macromedia Flash 8. Когда я впервые стал смотреть на возможности этого класса, меня разочаровало то, что на сервер вместе с загружаемым файлом можно отправить данные только GET-методом. (Классический [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно в  <a href="http://yarovoy.com/">блоге GarbageCollector</a> появилась<a href="http://yarovoy.com/2008/01/25/new_events_in_netstream/"> статья о новых событиях класса NetStream</a>.</p>
<p>Я в свою очередь ) недавно обнаружил некоторые нововведения и в классе FileReference, впервые появившемся в Macromedia Flash 8.</p>
<p><span id="more-32"></span><br />
Когда я впервые  стал смотреть на возможности этого класса, меня разочаровало то, что на сервер вместе с загружаемым файлом можно отправить данные только GET-методом. (Классический урл-запрос с парами <em>переменная=значение</em>). Также нельзя было получить от сервера никаких данных, по завершении загрузки.</p>
<p>Недавно вновь обратился к этому классу, но уже в Adobe Flash CS3 &#8211; и, о чудо! Новые свойства и события, как раз на эту тему.</p>
<p>Новое свойство postData:String. &#8211; Как видно из названия (опыты подтверждают) &#8211; POST параметры, которые отправляются на сервер вместе с загружаемым файлом.<br />
Польза? Как минимум отправка сложной формы, включающей некий файл (картинку, звук, архив)  на сервер. Данные формируются строкой из все тех же пар <em>переменная=значение. </em></p>
<p>Новое событие:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">onUploadCompleteData  =  <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>fileRef:FileReference, <span style="color: #0066CC;">data</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;</pre></td></tr></table></div>

<p>Как видно из конструкции &#8211; по завершению аплоада, если сервер отдает какие то данные в ответ, то мы можем их получить в переменной data:String. Очень удобно хотя бы для того, чтобы сообщить пользователю, что его драгоценные данные отправлены и приняты.</p>
<p>Вот такие бонусы. Добавлю только, что все это работает в плеере 9.0.r28 и выше.</p>
<img src="http://murejib.com/?ak_action=api_record_view&id=32&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/01/29/novoe-v-klasse-filereference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Первая помощь флешовому HTML Render-у</title>
		<link>http://murejib.com/2008/01/28/pervaya-pomoshh-fleshovomu-html-render-u/</link>
		<comments>http://murejib.com/2008/01/28/pervaya-pomoshh-fleshovomu-html-render-u/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 10:44:05 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[Полезное]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[TextField]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=35</guid>
		<description><![CDATA[Форматирование текста с помощью HTML во флеш,что ни говори &#8211; гораздо удобнее, чем форматирование с TextFormat, практически в любой ситуации. Если Вас сильно огорчает сильно урезанный набор тегов, который HTML парсер флеша понимает &#8211; читайте дальше. Итак, что мы имеем в распоряжении: P, B, I, U, A, BR, LI, I, IMG, SPAN, TEXTFORMAT, FONT. Как [...]]]></description>
			<content:encoded><![CDATA[<p>Форматирование текста с помощью HTML во флеш,что ни говори &#8211; гораздо удобнее, чем форматирование с TextFormat, практически в любой ситуации.</p>
<p>Если Вас сильно огорчает сильно урезанный набор тегов, который HTML парсер флеша понимает &#8211; читайте дальше.</p>
<p><span id="more-31"></span> Итак, что мы имеем в распоряжении:<br />
P, B, I, U, A, BR, LI, I, IMG, SPAN, TEXTFORMAT, FONT.</p>
<p>Как видим &#8211; ни хедеров, ни STRONG, который рекомендуется вместо B. Заставить флеш-хтмл-парсер понимать h1, h2&#8230;. strong, em не прибегая к хакам &#8211; елементарно.<br />
У нас же есть законный TextField.StyleSheet. А с помощью css можно форматировать любой XML документ. Грамотный HTML &#8211; это тот же XML, поэтому нам достаточно описать в каком виде мы хотим видеть наши заголовки, описать strong, em &#8211; и все что нам нужно в таблице стилей.</p>
<p>Маленькая странность &#8211; любой неподдерживаемый тег, описанный в таблице стилей &#8211; разрывает строку. В случае заголовоков это даже полезно, а вот strong, разрывающий пасть строке &#8211; это экзотика  К счастью флеш поддерживает свойство display.  Так что display: inline &#8211; поставит все на свои места.</p>
<p>Дружите с цсс+хтмл. Великий поклон разработчикам за то, что они избавили меня лично от необходимости повсеместно пользоваться текстФорматом. Даже за такой куцый парсер хтмл.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// стиль</span>
<span style="color: #000000; font-weight: bold;">var</span> style_string:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;h1 {font-size: 20; font-weight: bold} &quot;</span>;
style_string += <span style="color: #ff0000;">&quot;strong {font-weight: bold; display: inline;}&quot;</span>;
<span style="color: #000000; font-weight: bold;">var</span> style_css:<span style="color: #0066CC;">TextField</span>.<span style="color: #006600;">StyleSheet</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextField</span>.<span style="color: #006600;">StyleSheet</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
style_css.<span style="color: #0066CC;">parseCSS</span><span style="color: #66cc66;">&#40;</span>style_string<span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// текст</span>
<span style="color: #000000; font-weight: bold;">var</span> html_text:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;
&lt;/code&gt;
&lt;h1&gt;Нeader&lt;/h1&gt;
&quot;</span>;
html_text +=<span style="color: #ff0000;">&quot;&lt;strong&gt; Very strong line &lt;/strong&gt;&quot;</span>;
html_text +=<span style="color: #ff0000;">&quot;usual text&quot;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// текстовое поле</span>
<span style="color: #000000; font-weight: bold;">var</span> tf:<span style="color: #0066CC;">TextField</span> = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">createTextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;tf&quot;</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">10</span>,<span style="color: #cc66cc;">400</span>,<span style="color: #cc66cc;">200</span><span style="color: #66cc66;">&#41;</span>;
tf.<span style="color: #0066CC;">multiline</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #0066CC;">wordWrap</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #0066CC;">border</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #0066CC;">html</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #0066CC;">condenseWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #006600;">styleSheet</span> = style_css;
tf.<span style="color: #0066CC;">htmlText</span> = html_text;</pre></td></tr></table></div>

<p>Ну, а если требуется что-то более продвинутое &#8211; посмотрите на компонент HTMLRenderer Андрея Горбатова: <a href="http://gorbatov.blogspot.com/2007/04/htmlrenderer-htmltext.html">http://gorbatov.blogspot.com/&#8230;/htmlrenderer</a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=31&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/01/28/pervaya-pomoshh-fleshovomu-html-render-u/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ScrollRect vs setMask</title>
		<link>http://murejib.com/2007/12/09/scrollrect-vs-setmask/</link>
		<comments>http://murejib.com/2007/12/09/scrollrect-vs-setmask/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 15:39:32 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[NB]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=23</guid>
		<description><![CDATA[На заметку. Если нужно применить к клипу прямоугольную маску, вместо MovieClip.setMask(mc:MovieClip) лучше воспользоваться свойством scrollRect (доступно от 8-й версии и выше). Плюс в производительности на лицо. Более того &#8211; под такой &#8220;маской&#8221; не пропадают системные и не-внедренные шрифты. Использование предельно просто: 1 2 3 import flash.geom.Rectangle; var maskRect:Rectangle = new Rectangle&#40;x,y,width,height&#41;; my_mc.scrollRect = maskRect; С [...]]]></description>
			<content:encoded><![CDATA[<p>На заметку.</p>
<p>Если нужно применить к клипу прямоугольную маску, вместо MovieClip.setMask(mc:MovieClip) лучше воспользоваться свойством scrollRect (доступно от 8-й версии и выше).</p>
<p>Плюс в производительности на лицо. Более того &#8211; под такой &#8220;маской&#8221; не пропадают системные и не-внедренные шрифты.</p>
<p>Использование предельно просто:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">geom</span>.<span style="color: #006600;">Rectangle</span>;
<span style="color: #000000; font-weight: bold;">var</span> maskRect:Rectangle = <span style="color: #000000; font-weight: bold;">new</span> Rectangle<span style="color: #66cc66;">&#40;</span>x,y,<span style="color: #0066CC;">width</span>,<span style="color: #0066CC;">height</span><span style="color: #66cc66;">&#41;</span>;
my_mc.<span style="color: #006600;">scrollRect</span> = maskRect;</pre></td></tr></table></div>

<p>С такой &#8220;маской&#8221; удобно делать также и скроллеры (собственно название выдает).<br />
Достаточно поменять значение x, y для Rectangle, и визуально мы видим смещение контента мувиКлипа.</p>
<img src="http://murejib.com/?ak_action=api_record_view&id=21&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/09/scrollrect-vs-setmask/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Защита от неплательщиков.</title>
		<link>http://murejib.com/2007/12/06/pay-protection/</link>
		<comments>http://murejib.com/2007/12/06/pay-protection/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 12:12:42 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[грабли]]></category>
		<category><![CDATA[traps]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=10</guid>
		<description><![CDATA[На волнах фриланса частенько попадаются жадные купцы. Денежку пожалеют, и разработчику не заплатят. Особенно озадачивает разработчика сей факт, когда он, наивный, отдал результат работы в жадные купцовы руки. Лучшая защита &#8211; работать только с теми, кто у вас в local-trust ))) Но вот еще небольшая подмога. Класс Permission. Для работы с ним, конечно понадобиться свой [...]]]></description>
			<content:encoded><![CDATA[<p>На волнах фриланса частенько попадаются жадные купцы.<br />
Денежку пожалеют, и разработчику не заплатят.<br />
Особенно озадачивает разработчика сей факт, когда он, наивный, отдал результат работы в жадные купцовы руки.</p>
<p>Лучшая защита &#8211; работать только с теми, кто у вас в local-trust )))</p>
<p><span id="more-11"></span></p>
<p>Но вот еще небольшая подмога. Класс Permission.<br />
Для работы с ним, конечно понадобиться свой родной домен,  на который вы сможете положить скромный crossdomain.xml. В нем укажите доступ  для того домена, на котором будет лежать результат вашей работы. Ну а если не знаете где именно, будет лежать разрешайте доступ всем. Хуже не будет.</p>
<p>Далее. Кладем у себя мальнький текстовый файл, в котором будут записаны две переменных allow=1 и message=ЗАПЛАТИ ДЕНЕГ!!!</p>
<p>Пока allow=1 флешка будет работать как положено.<br />
Но как только вам покажется, что денег больше не видать &#8211; меняйте allow=0.<br />
Теперь все будут поверх флешки периодически читать ваш душещипательный message.</p>
<p>Конечно, по завершении работ, в случае благополучной оплаты &#8211; лучше убрать эту мышеловку из кода, и отправить финальный , стерильный вариант.</p>
<p><strong>Использование:</strong></p>
<p>Просто заводим новый экземпляр Permission и передаем в конструкторе путь к текстовому файлу.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> my_permission:Permission = <span style="color: #000000; font-weight: bold;">new</span> Permission<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;my_domain.net/my_permission.txt&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p><strong>Код классa:</strong> <a href="http://bbexp.ru/ru/decafe/utils/Permission.as">ru.decafe.utils.Permission</a></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* class ru.decafe.utils.Permission
* @author Mikhail Ivanchuk
* @version 0.1
*/</span>
<span style="color: #0066CC;">import</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cache</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Permission</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span>  theURL:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;&quot;</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> accessor:<span style="color: #0066CC;">LoadVars</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> blinker:<span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> alert_mc:<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">message</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;&quot;</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Permission<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		theURL = <span style="color: #0066CC;">url</span>;
		accessor = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LoadVars</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> loadAccess<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> refer:Permission = <span style="color: #0066CC;">this</span>;
		<span style="color: #000000; font-weight: bold;">var</span> _key:<span style="color: #0066CC;">String</span> = theURL.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;?&quot;</span><span style="color: #66cc66;">&#41;</span>==-<span style="color: #cc66cc;">1</span>?<span style="color: #ff0000;">&quot;?&quot;</span>:<span style="color: #ff0000;">&quot;&amp;amp;&quot;</span>;
		accessor.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>theURL+Cache.<span style="color: #006600;">disable</span><span style="color: #66cc66;">&#40;</span>_key+<span style="color: #ff0000;">&quot;nocache=&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		accessor.<span style="color: #0066CC;">onLoad</span> = <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>success:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> mode:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;demo&quot;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>success <span style="color: #66cc66;">&amp;</span>amp;<span style="color: #66cc66;">&amp;</span>amp; <span style="color: #0066CC;">this</span>.<span style="color: #006600;">allow</span> == <span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				mode = <span style="color: #ff0000;">&quot;allow&quot;</span>;
			<span style="color: #66cc66;">&#125;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mode: &quot;</span>+mode+<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>+<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">message</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>mode==<span style="color: #ff0000;">&quot;demo&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				refer.<span style="color: #0066CC;">message</span> = <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">message</span>;
				refer.<span style="color: #006600;">blinker</span> = <span style="color: #0066CC;">setInterval</span><span style="color: #66cc66;">&#40;</span>refer,<span style="color: #ff0000;">&quot;alert&quot;</span>,<span style="color: #cc66cc;">10000</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> alert<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		alert_mc = _level0.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;alrt&quot;</span>,_level0.<span style="color: #0066CC;">getNextHighestDepth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> txt:<span style="color: #0066CC;">TextField</span> = alert_mc.<span style="color: #0066CC;">createTextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;txt&quot;</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">150</span>,<span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span>;
		txt.<span style="color: #0066CC;">background</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
		txt.<span style="color: #0066CC;">multiline</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">wordWrap</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">backgroundColor</span> = 0xDEDEDE;
		txt.<span style="color: #0066CC;">border</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">borderColor</span> = <span style="color: #cc66cc;">0</span>;
		txt.<span style="color: #0066CC;">html</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">condenseWhite</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		txt.<span style="color: #0066CC;">htmlText</span> = <span style="color: #ff0000;">&quot;
&nbsp;
&lt;span style=&quot;</span>font-family: Arial;<span style="color: #ff0000;">&quot;&gt;&quot;</span>+<span style="color: #0066CC;">message</span>+<span style="color: #ff0000;">&quot;
&nbsp;
&quot;</span>;
		alert_mc.<span style="color: #006600;">counter</span> = <span style="color: #cc66cc;">100</span>;
		alert_mc.<span style="color: #0066CC;">onEnterFrame</span> = <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">counter</span>--;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #006600;">counter</span><span style="color: #66cc66;">&amp;</span>lt;<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">removeMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&lt;/</span>span<span style="color: #66cc66;">&gt;</span></pre></div></div>

<p><span style="font-family: Arial;">+ Cache.as, который необходим для работы класса Permission: <a href="http://bbexp.ru/ru/decafe/utils/Cache.as">ru.decafe.utils.Cache </a></p>
<p></span></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=11&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/06/pay-protection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Кеширование данных, и как с ним бороться.</title>
		<link>http://murejib.com/2007/12/06/anti-cache/</link>
		<comments>http://murejib.com/2007/12/06/anti-cache/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 11:52:46 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS2.0]]></category>
		<category><![CDATA[utils]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=9</guid>
		<description><![CDATA[Мало мальски серьезное приложение обязательно грузит в себя некие внешние данные. В случае работы на просторах сети эти данные попадают в кеш. Иногда эта особенность сильно мешает. К примеру мы делаем галерею которая постоянно пополняется. Адреса изображений заносятся в XML файл, который мы и грузим первым делом в нашу галерею. Единожды загрузившись &#8211; этот файл [...]]]></description>
			<content:encoded><![CDATA[<p>Мало мальски серьезное приложение обязательно грузит в себя некие внешние данные.<br />
В случае работы на просторах сети эти данные попадают в кеш.<br />
Иногда эта особенность сильно мешает. К примеру мы делаем галерею которая постоянно пополняется. Адреса изображений заносятся в XML файл, который мы и грузим первым   делом в нашу галерею. Единожды загрузившись &#8211; этот файл надолго попадает в кеш и наша галерея ничего и знать не знает об обновлениях.</p>
<p><span id="more-10"></span></p>
<p>Сценарий 2:<br />
Мы пишем клиентскую часть игры для он-лайн казино. Все процессы связанные с логикой   игры происходят на жутко засекреченном сервере, наш клиент только отображает красиво все эти процессы. В определенный момент отправляет серверу данные о   действиях игрока, в ответ получая XML с состоянием дел: Баланс игрока, комбинацию карт (или символов, если это слот-машина) ну и много всего разного.</p>
<p>Несмотря на то что мы не запрашиваем реально существующий XML, все равно результат заносится в кеш, и по следующему подобному запросу мы получим старые данные. В итоге &#8211; игрок выиграл 100000, но не знает, что это случилось.</p>
<p>Самый простой способ это приклеить <em><span style="color: #000080;">Math.random() </span></em>к запросу. Тогда браузер воспримет такой запрос как абсолютно новый и радостно вернет нам нужные данные в самом свежем виде. Но, полагаться на <em><span style="color: #000080;">Math.random()</span></em> всегда я бы не стал.</p>
<p>И я не стал. Как раз когда мне довелось писать кучу игр для казино, возник вопрос о железной защите от кеша. В итоге родился шизофренический метод, который позже я перелопатил в класс с одним единственным статичным методом. Базируется он на самой непостоянной субстанции &#8211; времени.</p>
<p>Однако на этом мы успокаиваться не будем. Иногда нам нужно чтобы свежие данные приходили не так часто. Допустим у меня есть сайт-портфолио, состоящий из нескольких html-страниц.  На каждой имеется флеш-галерея работ. Если я буду отключать кеш для каждой загрузки &#8211; то мой посетитель будет упорно грузить свежие данные при каждом возвращении на страницу. Выход &#8211; обновляться скажем только каждый час, или день.</p>
<p>В общем хватит слов. Класс элементарный &#8211; и все будет ясно из его кода.</p>
<p>Метод один <em>Cache.disable(key:<span style="color: #000080;">String</span>, level:<span style="color: #000080;">Number</span>);</em><br />
<em>key</em> &#8211; это строка, которую нужно приклеить к запросу.  Или банальный &#8220;?&#8221; (&#8220;&amp;&#8221; если в запросе уже есть пары имя=значение), или что-то сокровенное вроде &#8220;?nocache=&#8221;.<br />
<em>level</em> &#8211; уровень защиты от кеша. Передаем одну из констант:<br />
<em>Cache.MONTH, Cache.DAY, Cache.HOUR, Cache.MINUTE, Cache.FULL</em></p>
<p><strong>код класса:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
* class Cache
* @author Mikhail Ivanchuk
* @version 0.1
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> ru.<span style="color: #006600;">decafe</span>.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cache</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> MONTH:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> DAY:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> HOUR:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">3</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> MINUTE:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">4</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> FULL:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">5</span>;
	<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">function</span> disable<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>:<span style="color: #0066CC;">String</span>, <span style="color: #0066CC;">level</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> == <span style="color: #0066CC;">undefined</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0066CC;">level</span> = Cache.<span style="color: #006600;">FULL</span>;
		<span style="color: #000000; font-weight: bold;">var</span> browser:<span style="color: #0066CC;">Boolean</span> = <span style="color: #66cc66;">&#40;</span>_level0.<span style="color: #0066CC;">_url</span>.<span style="color: #0066CC;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #ff0000;">&quot;http&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// timestamp</span>
		<span style="color: #000000; font-weight: bold;">var</span> timestamp:<span style="color: #0066CC;">Date</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampY:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getYear</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMN:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMonth</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampD:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getDate</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampH:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getHours</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampM:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMinutes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampS:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getSeconds</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMS:<span style="color: #0066CC;">Number</span> = timestamp.<span style="color: #0066CC;">getMilliseconds</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #000000; font-weight: bold;">var</span> timestampMT:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Date</span>.<span style="color: #0066CC;">UTC</span><span style="color: #66cc66;">&#40;</span>timestampY,timestampMN,timestampD,timestampH,timestampM,timestampS,timestampMS<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">//date string</span>
		<span style="color: #000000; font-weight: bold;">var</span> dateString:<span style="color: #0066CC;">String</span> = timestampY.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span> +timestampMN.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">MONTH</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampD.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">DAY</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampH.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">HOUR</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampM.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">level</span> <span style="color: #66cc66;">&lt;</span>= Cache.<span style="color: #006600;">MINUTE</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
		dateString += timestampS.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>+timestampMS.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>+timestampMT.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// random</span>
		<span style="color: #000000; font-weight: bold;">var</span> addition:<span style="color: #0066CC;">String</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">floor</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">return</span> <span style="color: #66cc66;">&#40;</span>browser?<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">key</span>+dateString+addition<span style="color: #66cc66;">&#41;</span>:<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<img src="http://murejib.com/?ak_action=api_record_view&id=10&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/06/anti-cache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

