<?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>FlashImp</title>
	<atom:link href="http://flashimp.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://flashimp.ru</link>
	<description>Flash Implosion new generation</description>
	<lastBuildDate>Sun, 15 Aug 2010 13:27:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>I&#8217;m alive. FlashImp too.</title>
		<link>http://flashimp.ru/112</link>
		<comments>http://flashimp.ru/112#comments</comments>
		<pubDate>Sun, 15 Aug 2010 13:27:21 +0000</pubDate>
		<dc:creator>FIZZER</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=112</guid>
		<description><![CDATA[В последнее время я сильно погряз в болоте работы, сроки сдачи которой давно проебал. Собственно, в болоте этом я сижу все время, но обычно не больше чем по колено, а тут накрывает с головой. Тем не менее, я отчаянно барахтаюсь в попытке выбраться из отвратительной трясины лени и безответственности.
В скором времени начну выкладывать некоторые наработки, [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время я сильно погряз в болоте работы, сроки сдачи которой давно проебал. Собственно, в болоте этом я сижу все время, но обычно не больше чем по колено, а тут накрывает с головой. Тем не менее, я отчаянно барахтаюсь в попытке выбраться из отвратительной трясины лени и безответственности.<br />
В скором времени начну выкладывать некоторые наработки, эксперименты, идеи.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s Adobe :) LOL</title>
		<link>http://flashimp.ru/107</link>
		<comments>http://flashimp.ru/107#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:20:48 +0000</pubDate>
		<dc:creator>FIZZER</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=107</guid>
		<description><![CDATA[download link
]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_108" class="wp-caption alignnone" style="width: 570px">Check out cool app description...<a href="http://labs.adobe.com/technologies/widgetbrowser/"><img class="size-full wp-image-108" title="Screen shot 2010-06-12 at 12.48.25 AM" src="http://flashimp.ru/wp-content/uploads/Screen-shot-2010-06-12-at-12.48.25-AM.png" alt="Adobe Dreamweaver Widget Browser" width="560" height="466" /></a><p class="wp-caption-text">Adobe Dreamweaver Widget Browser</p></div><br />
<a href="http://labs.adobe.com/downloads/widgetbrowser.html">download link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/107/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UINativeWindow</title>
		<link>http://flashimp.ru/101</link>
		<comments>http://flashimp.ru/101#comments</comments>
		<pubDate>Wed, 28 Apr 2010 10:26:21 +0000</pubDate>
		<dc:creator>FIZZER</dc:creator>
				<category><![CDATA[Накодил]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[native]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=101</guid>
		<description><![CDATA[
package ru.kozlovskij.air
&#123;
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.NativeWindow;
	import flash.display.NativeWindowInitOptions;
	import flash.events.Event;
&#160;
	import mx.core.IUIComponent;
	import mx.events.FlexEvent;
	import mx.managers.WindowedSystemManager;
&#160;
	/**
	 * Composition of &#60;code&#62;NativeWindow&#60;/code&#62; and &#60;code&#62;IUIComponent&#60;/code&#62;.
	 * 
	 * @author Aleksandr.Kozlovskiy
	 */	
	public class UINativeWindow extends NativeWindow
	&#123;
		protected var systemManager:WindowedSystemManager;
		protected var childDisplayObject:IUIComponent;
		protected var rootDisplayObject:IUIComponent;
&#160;
		/**
		 * After initialization &#60;code&#62;childDisplayObject&#60;/code&#62; added to &#60;code&#62;systemManager&#60;/code&#62;'s displaylist.
		 * 
		 * 
		 * @param initOptions:NativeWindowInitOptions - Analogically NativeWindow initOptions.
		 * @param rootDisplayObject:IUIComponent - [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> ru.kozlovskij.air
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">DisplayObject</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">DisplayObjectContainer</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.NativeWindow;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.NativeWindowInitOptions;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> mx.core.IUIComponent;
	<span style="color: #0033ff; font-weight: bold;">import</span> mx.events.FlexEvent;
	<span style="color: #0033ff; font-weight: bold;">import</span> mx.managers.WindowedSystemManager;
&nbsp;
	<span style="color: #3f5fbf;">/**
	 * Composition of &lt;code&gt;NativeWindow&lt;/code&gt; and &lt;code&gt;IUIComponent&lt;/code&gt;.
	 * 
	 * @author Aleksandr.Kozlovskiy
	 */</span>	
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> UINativeWindow extends NativeWindow
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> systemManager<span style="color: #000000; font-weight: bold;">:</span>WindowedSystemManager;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> childDisplayObject<span style="color: #000000; font-weight: bold;">:</span>IUIComponent;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> rootDisplayObject<span style="color: #000000; font-weight: bold;">:</span>IUIComponent;
&nbsp;
		<span style="color: #3f5fbf;">/**
		 * After initialization &lt;code&gt;childDisplayObject&lt;/code&gt; added to &lt;code&gt;systemManager&lt;/code&gt;'s displaylist.
		 * 
		 * 
		 * @param initOptions:NativeWindowInitOptions - Analogically NativeWindow initOptions.
		 * @param rootDisplayObject:IUIComponent - Root Application or other IUIComponent implementation. Mast extends DisplayObject.
		 * @param childDisplayObject:IUIComponent - Container. Child Application or other IUIComponent implementation. Mast extends DisplayObject.
		 * 
		 */</span>		
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> UINativeWindow<span style="color: #000000;">&#40;</span>initOptions<span style="color: #000000; font-weight: bold;">:</span>NativeWindowInitOptions,
									   rootDisplayObject<span style="color: #000000; font-weight: bold;">:</span>IUIComponent,
									   childDisplayObject<span style="color: #000000; font-weight: bold;">:</span>IUIComponent<span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span>initOptions<span style="color: #000000;">&#41;</span>;
			<span style="color: #0033ff; font-weight: bold;">this</span>.rootDisplayObject = rootDisplayObject;
			<span style="color: #0033ff; font-weight: bold;">this</span>.childDisplayObject = childDisplayObject;
&nbsp;
			addChildren<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">stage</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">RESIZE</span>, stageResizeHandler<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> addChildren<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			childDisplayObject.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>FlexEvent.CREATION_COMPLETE, childCreationCompleteHandler, <span style="color: #0033ff; font-weight: bold;">false</span>, <span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#40;</span><span style="color: #004993;">stage</span>.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>systemManager = <span style="color: #0033ff; font-weight: bold;">new</span> WindowedSystemManager<span style="color: #000000;">&#40;</span>rootDisplayObject<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">DisplayObjectContainer</span><span style="color: #000000;">&#41;</span>
				.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>childDisplayObject <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">DisplayObject</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			stageResizeHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> childCreationCompleteHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span>FlexEvent<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			childDisplayObject.<span style="color: #004993;">removeEventListener</span><span style="color: #000000;">&#40;</span>FlexEvent.CREATION_COMPLETE, childCreationCompleteHandler<span style="color: #000000;">&#41;</span>;
			stageResizeHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #009900;">// ------------------ resize ----------------------- //</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> stageResizeHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span> = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			childDisplayObject.<span style="color: #004993;">width</span> = <span style="color: #004993;">stage</span>.<span style="color: #004993;">stageWidth</span>;
			childDisplayObject.<span style="color: #004993;">height</span> = <span style="color: #004993;">stage</span>.<span style="color: #004993;">stageHeight</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/101/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creative Suite 5 to launch on April 12th</title>
		<link>http://flashimp.ru/99</link>
		<comments>http://flashimp.ru/99#comments</comments>
		<pubDate>Wed, 24 Mar 2010 07:51:43 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=99</guid>
		<description><![CDATA[Ура, товарищи! Ждёмс..
]]></description>
			<content:encoded><![CDATA[<p>Ура, товарищи! Ждёмс..</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emergency Flash Platform World Help</title>
		<link>http://flashimp.ru/94</link>
		<comments>http://flashimp.ru/94#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:22:22 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=94</guid>
		<description><![CDATA[Приветствую, дамы и господа разработчики!
Обращаюсь к тем членам нашего комьюнити, ощущающих острую нехватку "огонька" и денюшек, - экстрима в общем.
Все желающие участвовать в интересных и не очень, но чрезвычайно горячих проектах, в качестве скорой программерской помощи - милости прошу (мыло в конце поста).
Меня в первую очередь интересуют реально крутые монстры своего ремесла с правдивым опытом [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую, дамы и господа разработчики!<br />
Обращаюсь к тем членам нашего комьюнити, ощущающих острую нехватку "огонька" и денюшек, - экстрима в общем.<br />
Все желающие участвовать в интересных и не очень, но чрезвычайно горячих проектах, в качестве скорой программерской помощи - милости прошу (мыло в конце поста).</p>
<p>Меня в первую очередь интересуют реально крутые монстры своего ремесла с правдивым опытом работы от трёх лет и могущих мономоментно сорваться с места и полностью погрузиться в разруливание сложных по реализации или по срокам задач.</p>
<p>Новички, желающие получить себе в резюме пару красивых строчек, в бумажник положить пару красивых бумажек, поработать с великими мира сего - вы нужны.</p>
<p>Работает это все так:<br />
-вы присылаете мне письмо, в котором пишете:<br />
--ФИО (+ в теме письма)<br />
--Опыт работы (срок службы в рядах флэш-разработчиков)<br />
--Список компаний, с которыми вы лично сотрудничали<br />
--Специализация (что лучше и быстрее всего получается)<br />
--Контакты, по которым вас можно выцепить где угодно (в разумное время суток естественно)<br />
--Способы расчета с вами<br />
--другая информация, в т.ч. ссылки на работы, резюме и т.п.<br />
- и всё.</p>
<p>А потом ВНЕЗАПНО получаете что-то вроде "За две недели надо сделать такую игрушку вот по этому ТЗ. Денег столько, сроки такие, дизайн есть. Берешься?" и понеслась..</p>
<p>Электропочта: EmergencyFlashPlatformWorldHelp@   Kozlovskij.ru или FlashImp.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/94/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book: &#8220;Hello! Flex 4&#8243;</title>
		<link>http://flashimp.ru/90</link>
		<comments>http://flashimp.ru/90#comments</comments>
		<pubDate>Thu, 24 Dec 2009 18:15:55 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex4]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=90</guid>
		<description><![CDATA[На заграничных прилавках появилась первая книжка про Flex 4: "Hello! Flex 4". Автор: Peter Armstrong.
PDF ebook стоит $22.50.
]]></description>
			<content:encoded><![CDATA[<p>На заграничных прилавках появилась первая книжка про Flex 4: "<a title="Book: Hello! Flex 4" href="http://www.manning.com/armstrong3/" target="_blank">Hello! Flex 4</a>". Автор: <a title="Peter Armstrong 's Blog" href="http://www.peterarmstrong.com/" target="_blank">Peter Armstrong</a>.<br />
PDF ebook стоит $22.50.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/90/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Package Assistant (public alpha)</title>
		<link>http://flashimp.ru/85</link>
		<comments>http://flashimp.ru/85#comments</comments>
		<pubDate>Wed, 23 Dec 2009 18:50:57 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[ADT]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AIR2]]></category>
		<category><![CDATA[assistant]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[native installers]]></category>
		<category><![CDATA[packager]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=85</guid>
		<description><![CDATA[Serge Jespers опубликовал Package Assistant, о котором писал ранее.
Текущая версия: "public alpha".
Скачать можно тут (.dmg).
Это AIR2-приложение представляет из себя некоего "помощника" для сборки приложений с нативными (встроенными) инсталяторами. Эти самые инсталяторы - есть одна из фич AIR2.
Так вот, чтобы воспользоваться этой вкусняжкой, приходилось иметь дело с ADT (command line compiler) , что не очень удобно. [...]]]></description>
			<content:encoded><![CDATA[<p>Serge Jespers <a title="AIR 2 Package Assistant “public alpha”" href="http://www.webkitchen.be/2009/12/23/air-2-package-assistant-public-alpha/" target="_blank">опубликовал</a> Package Assistant, о котором <a title="Introducing: Package Assistant (AIR 2 package utility built with AIR 2)" href="http://www.webkitchen.be/2009/12/17/introducing-package-assistant-air-2-package-utility-built-with-air-2/" target="_blank">писал ранее</a>.<br />
Текущая версия: "public alpha".<br />
Скачать можно <a title="download the application" href="http://dl.dropbox.com/u/117996/PackageAssistant.dmg" target="_self">тут</a> (.dmg).</p>
<p>Это AIR2-приложение представляет из себя некоего "помощника" для сборки приложений с нативными (встроенными) инсталяторами. Эти самые инсталяторы - есть одна из фич AIR2.</p>
<p>Так вот, чтобы воспользоваться этой вкусняжкой, приходилось иметь дело с ADT (command line compiler) , что не очень удобно. А Package Assistant дает нам UI к компилятору.<br />
Вот, что пишет сам автор:</p>
<blockquote><p>The wizard style application allows you to easily identify the files it needs and after just 4 steps you simply<br />
hit the compile button. A lot easier than fiddling around with the command line <img src='http://flashimp.ru/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p></blockquote>
<p>Можно посмотреть <a title="скринкаст" href="http://vimeo.com/8235248" target="_blank">скринкаст</a> (недельной давности).</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/85/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Анонс Flash Platform Game Technology Center</title>
		<link>http://flashimp.ru/80</link>
		<comments>http://flashimp.ru/80#comments</comments>
		<pubDate>Wed, 23 Dec 2009 18:08:50 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[services]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=80</guid>
		<description><![CDATA[Позитивная новость для геймдива:
В полку сервисов всеми любимой Adobe прибыло. Точнее, прибудет.
Adobe анонсировала открытие Flash Platform Game Technology Center - ресурса для разработчиков игр на Flash Platform.
Украдено у Алексея Яковенко.
UPD: Только что на девнете была опубликована статья Danielle Deibler Introducing the Adobe Flash Platform Gaming.
]]></description>
			<content:encoded><![CDATA[<p>Позитивная новость для геймдива:<br />
В полку сервисов всеми любимой Adobe прибыло. Точнее, прибудет.<br />
Adobe <a title="Анонс Flash Platform Game Technology Center" href="http://www.adobe.com/devnet/games/" target="_blank">анонсировала</a> открытие Flash Platform Game Technology Center - ресурса для разработчиков игр на Flash Platform.</p>
<p>Украдено у <a title="injun #576871 : Flash Platform Game Technology Center" href="http://injun.ru/?p=914" target="_blank">Алексея Яковенко</a>.</p>
<p>UPD: Только что на девнете была опубликована статья Danielle Deibler <a title="Adobe DEVNET:  Introducing the Adobe Flash Platform Gaming Technology Center" href="http://www.adobe.com/devnet/logged_in/ddeibler_flash_platform_games.html?devcon=f1" target="_blank">Introducing the Adobe Flash Platform Gaming</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preloading in three frames system.</title>
		<link>http://flashimp.ru/39</link>
		<comments>http://flashimp.ru/39#comments</comments>
		<pubDate>Tue, 22 Dec 2009 10:49:12 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Накодил]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[mxmlc]]></category>
		<category><![CDATA[preloading]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=39</guid>
		<description><![CDATA[<pre lang="xml">
<![CDATA[
<flex-config>
	<compiler>
		<keep-as3-metadata>
			<name>App</name>
		</keep-as3-metadata>
	</compiler>
</flex-config>
]]>
</pre>



Для начала несколько слов прелюдии.
Примерно полтора года назад я накодил простенький передзагрузчик (<a title="Dreaming in Flash: Actionscript 3 Preloader" href="http://www.dreaminginflash.com/2007/11/13/actionscript-3-preloader/" target="_blank">аналог</a>), стартующий до инициализации главного класса приложения, и периодически его дополнял и частично переписывал. Таким образом один класс вырос в целую систему, поддерживающую модульную архитектуру, полиморфизм, и предзагрузку необходимых ассетов.
Эту разработку я частенько сам использую в больших многомодульных проектах, где есть одна или несколько библиотек (swc) и огромное количество модулей, эти библиотеки использующие; Предзагрузчик у всех модулей - один, следовательно вынесен в библиотеку, а не клонируется по всей команде разработчиков от проекта к проекту. При этом (частая ситуация) хорошо было бы, что бы все модули приложения могли работать как самостоятельно, так и внутри любого другого модуля, - т.е. полиморфизм. Вот эту ситуацию и возьму за основу.

По-сути, мое решение представляет из себя неслабое универсализированное расширение уже давно описанных метод: <a title="Flash-разработка: Делаем прелоадер для Flex-приложения. AS3." href="http://racer242.blogspot.com/2008/01/flex-as3.html" target="_blank">тут (по-русски)</a>, <a title="BIT-101 Blog: Preloaders in AS3" href="http://www.bit-101.com/blog/?p=946" target="_blank">тут</a> и <a title="Roger Gonzalez: Modular Applications (part 2)" href="http://blogs.adobe.com/rgonzalez/2006/06/modular_applications_part_2.html" target="_blank">тут</a> - настоятельно рекомендую ознакомиться перед продолжением.

Теория.
Добавляя в Главный Класс метадату:
<pre lang="actionscript3">[Frame(factoryClass="ru.kozlovskij.preload.Preloader")]</pre>
мы получаем вот такой результат:
[Схема с нашим классом]

Но все было бы чудесно, если б не одна проблема: Наш предзагрузчик понятия не имеет об имени главного класса приложения, который ему надо инстанциировать, а заниматься жестким хардкодом в большом проекте - непозволительная роскошь. Первая мысль была такова:
В каждом проекте-модуле использовать в качестве предзагрузчика субкласс того основного, что находится в библиотеке и остается неизменным. В этом субклассе мы просто переопределяем значение protected переменной <strong>MAINCLASS_NAME</strong>, ранее заведенной в основном классе и далее используем ее при инстанциировании нужного нам главного класса приложения. Но это мне вскоре надоело (неудобно) и было придумано более интересное решение:
Предзагрузчик наш остается в библиотеке, не имеет никаких субклассов (можно даже сделать его final). После загрузки всей свифки он сам найдет нужное ему имя класса в метаданных, а в голове главного класса мы просто впишем свой кастомный метатэг:
<pre lang="actionscript3">[App(className='ИмяГлавногоКласса')]</pre>
Что бы компиллер "увидел" наш метатэг, в параметры компилятора (в свойствах проекта) впишем:
<code>-load-config cfg.xml</code>
(про параметры компилятора подробности <a title="About the application compiler options" href="http://livedocs.adobe.com/livecycle/es/sdkHelp/programmer/lcds/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&#38;file=compilers_09.html" target="_blank">тут</a>)
А в конфиге мы явно укажем, что на наш метатэг стоит обратить внимание:

<em>cfg.xml</em>:
<pre lang="xml" escape="true">
&#60;flex-config&#62;
	&#60;compiler&#62;
	&#60;keep-as3-metadata&#62;
	&#60;name&#62;App&#60;/name&#62;
	&#60;/keep-as3-metadata&#62;
	&#60;/compiler&#62;
&#60;/flex-config&#62;
</pre>

<em>Main.as</em> - главный класс нашего приложения:
<pre lang="actionscript3">package {
	import flash.display.FrameLabel;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.utils.*;

	import ru.kozlovskij.core.Application;
	import ru.kozlovskij.preload.Preloader;

	/**
	* SWF metadata
	*/
	[SWF(backgroundColor='0xFFCC00', width='500', height='500')]

	/**
	* The frameworks must be initialized by SystemManager.
	* This factoryClass will be automatically subclassed by any
	* MXML applications that don't explicitly specify a different
	* factoryClass.
	*
	* NOTE: Minimize the non-Flash classes you import here.
	* Any dependencies of SystemManager have to load in frame 1,
	* before the preloader, or anything else, can be displayed.
	*/
	[Frame(factoryClass='ru.kozlovskij.preload.Preloader')]
	//[Frame(factoryClass='exampleClasses.MyPreloader')]

	/**
	* Custom metadata tags
	*/
	[App(type='module', className='Main')]
	[copyrights(firstName='Aleksandr', lastName='Kozlovskij', url='http://Kozlovskij.ru', blog='http://FlashImp.ru')]
	public class Main extends Application
	{
		public function Main()
		{
			super();
			addEventListener(Preloader.PRELOADER_DONE, preloaderDoneHandler);
		}

		private function preloaderDoneHandler(e:Event):void
		{
			//initialize...
			for(var i:int; i &#60; (parent as MovieClip).currentLabels.length; ++i)
				trace('FrameLabel:', '[', FrameLabel((parent as MovieClip).currentLabels[i]).name,
					  ',', FrameLabel((parent as MovieClip).currentLabels[i]).frame, ']');
			(parent as MovieClip).nextFrame();
			parent.addChild(new (flash.utils.getDefinitionByName('exampleClasses.CustomFrame') as Class)());
		}
	}
}</pre>
Метод <strong>preloaderDoneHandler</strong> вызывается, когда от предзагрузчика мы получаем событие об окончании загрузки всего необходимого (+ассеты?). В <strong>preloaderDoneHandler</strong> мы, удовлетворения ради, выводим в трэйс все, имеющиеся в нашем распоряжении (в родителе-предзагрузчике) фрэймы. В последних двух строках мы переходим в третий кадр и инстанциируем класс, который был загружен последним - об этом чуток ниже.
Во многих моих реализациях данного подхода я либо создавал в <strong>Main</strong> классе метод, возвращающий массив урлов к тому, что еще необходимо загрузить, что было несколько криво и не гибко, либо записывал эту информацию в метаданные, что позволяло предзагрузчику все необходимое скачать еще до инициализации главного класса, а он в свою очередь рождался "на всем готовом". Нюансы реализацию такой инициализации приложения я покажу позже, а сейчас - простой пример того самого предзагрузчика:

<em>Preloader.as</em> - собственно, сам прелоудер:
<pre lang="actionscript3">package ru.kozlovskij.preload
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.system.ApplicationDomain;
	import flash.utils.ByteArray;

	import ru.etcs.utils.ClassExplorer;

	[Event(name="preloaderDone", type="ru.kozlovskij.preload.Preloader")]
	public class Preloader extends MovieClip
	{
		public static const PRELOADER_DONE:String = 'preloaderDone';

		protected var MAINCLASS_NAME:String;

		protected var preloaderGraphics:IPreloaderGraphics;

		private var Main:Class;
		private var main:DisplayObject;

		protected var _standalone:Boolean = true;
		protected function get standalone():Boolean
		{return _standalone;}

		public function Preloader(preloaderGraphics:IPreloaderGraphics = null)
		{
			stop();

			this.preloaderGraphics = preloaderGraphics ? preloaderGraphics : new PreloaderGraphics();

			if(stage)
				stage.scaleMode = StageScaleMode.NO_SCALE,
				stage.align = StageAlign.TOP_LEFT,
				stage.frameRate = 31,
				createGraphics(),
				stage.addEventListener(Event.RESIZE, resizeHandler);
			else
				_standalone = false;

			addEventListener(Event.ENTER_FRAME, enterFrameHandler);

			resizeHandler();
		}

		protected function createGraphics():void
		{
			addChild(preloaderGraphics as DisplayObject);
		}

		private function enterFrameHandler(e:Event):void
		{
			//percent = current / total
			var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
			preloaderGraphics.percent = percent * 100;

			//trace(Math.round(100 * percent) + '%');

			if(framesLoaded == totalFrames)
			{
				removeEventListener(Event.ENTER_FRAME, enterFrameHandler);

				//Move to the next frame when we're done
				//Moving to frame 1(!)
				nextFrame();

				preinit();
			}
		}

		protected function resizeHandler(e:Event = null):void
		{
			preloaderGraphics.x = stage ? stage.stageWidth / 2 : root.width / 2,
			preloaderGraphics.y = stage ? stage.stageHeight / 2 : root.height / 2;
		}

		private function preinit(mainclass_name_from_metadata:String = null):void
		{
			var needThrow:Boolean = true;
			MAINCLASS_NAME = mainclass_name_from_metadata ? mainclass_name_from_metadata :
							 MAINCLASS_NAME ? MAINCLASS_NAME : null;
			MAINCLASS_NAME ? null : (needThrow = false, getMETAMainClassName());
			if(needThrow &#38;&#38; !MAINCLASS_NAME)
			{
				clear();
				throw new Error(this.toString() + ': Main Class Definition eq null');
			}

			var has:Boolean = ApplicationDomain.currentDomain.hasDefinition(MAINCLASS_NAME);
			if(has)//if main app
				Main = ApplicationDomain.currentDomain.getDefinition(MAINCLASS_NAME) as Class;
			else
			{
				has = loaderInfo.applicationDomain.hasDefinition(MAINCLASS_NAME);
				if(has)//if module app
					Main = loaderInfo.applicationDomain.getDefinition(MAINCLASS_NAME) as Class;
			}

			if(has)
			{
				//and instantiate our Main class
				main = new Main();

				//get urls, whot need to additional preloading before starting application (in next post..)

				init();
				clear();
			}
			else
			if(needThrow)
			{
				clear();
				throw new Error(this.toString() + ': Main Class Definition NOT FOUND');
			}
		}

		private function init():void
		{
			//finally we add main class to the DisplayList and dispatching event
			addChild(main as DisplayObject).dispatchEvent(new Event(PRELOADER_DONE));

			//stage.addChild(main as DisplayObject) - only if we make a standalone app.
		}

		public function clear():void
		{
			//killing &#38; clearing preloaderGraphics :)
			IPreloaderGraphics(removeChild(preloaderGraphics as DisplayObject)).clear();

			standalone ? (stage.removeEventListener(Event.RESIZE, resizeHandler), stage.removeChild(this)) : null;
		}

		//-----------------------------------------------------//
		private function getMETAMainClassName():void
		{
			var bytes:ByteArray = new ByteArray();
				bytes.objectEncoding = 3;
				bytes.writeBytes(loaderInfo.bytes);
				bytes.position = 0;
			var explorer:ClassExplorer = new ClassExplorer();
				explorer.loadBytes(bytes);
				explorer.addEventListener(Event.COMPLETE, explorerWorkCompleteHandler);
		}

		private function explorerWorkCompleteHandler(e:Event):void
		{
			var explorer:ClassExplorer = e.target as ClassExplorer;
			var xml:XML = explorer.getDefinitionInfo();
			//trace(xml.toXMLString());
			var className:String;
			className = xml.definition/*.(@name == 'frame2')*/.script.classTrait.metadata.(@name == 'App').arg.(@key == 'className').@value.toString();
			preinit(className);
		}
	}
}</pre>
Как видно, в данной реализации я оставил возможность наследовать этот класс и переопределять значение переменной <strong>MAINCLASS_NAME</strong>. Так же в конструктор можно передать экземпляр визуализатора процесса загрузки, реализующий интерфейс <strong>IPreloaderGraphics</strong>. По умолчанию создается инстанс <strong>PreloaderGraphics</strong> - простейший субкласс <strong>DisplayObject</strong>'a, содержащий в себе текстовое поле для отображения процентов - это я тоже упростил:)

<em>ru.kozlovskij.preload.PreloaderGraphics</em>:
<pre lang="actionscript3">package ru.kozlovskij.preload
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;

	public class PreloaderGraphics extends Sprite implements IPreloaderGraphics
	{
		private var text:TextField = new TextField();

		public function PreloaderGraphics()
		{
			super();

			addChild(text);

			text.defaultTextFormat = new TextFormat('Tahoma');
			text.defaultTextFormat.align = TextFormatAlign.CENTER,
			text.defaultTextFormat.size = 13,
			text.defaultTextFormat.letterSpacing = 1,
			text.defaultTextFormat.bold = true;

			text.borderColor = text.textColor = 0x0,
			text.selectable = !(text.border = true),
			text.width = 100,
			text.height = 50;

			percent = 0;
		}

		private var _percent:Number = 0;
		public function set percent(value:Number):void
		{
			_percent = value;
			text.text = 'Loading...\n' + uint(value) + '%';
		}

		public function get percent():Number
		{
			return _percent;
		}

		public function clear():void
		{
			removeChild(text);
		}
	}
}</pre>
Вернемся к <strong>ru.kozlovskij.preload.Preloader</strong>. Как это все работает?
Запускается конструктор, подписываемся на событие <strong>Event.ENTER_FRAME</strong> и постоянно проверяем, не завершилась ли загрузка; Загрузка завершена, находим в метаданные и в них - имя главного класса (<strong>preinit</strong>-&#62;<strong>getMETAMainClassName</strong>-&#62;<strong>explorerWorkCompleteHandler</strong>-&#62;<strong>preinit</strong>), инициализируем главный класс, не забыв перед этим перескочить на второй кадр, - вот такая последовательность.
В демонстрируемой реализации в качестве "поисковика метадаты" я использовал <strong>ClassExplorer</strong>, за что отдельное спасибо <a title=" Записки о Flash:  ClassExplorer" href="http://etcs.ru/blog/as3/classexplorer/" target="_blank">автору</a>.
Для наших целей пришлось немного его подправить. Не помню уже где и что исправлял - интересующимся поможет любой мержер, например, <a title="Araxis Merge" href="http://www.araxis.com/merge/?gclid=CIzW9-b97J4CFUQM3god2REvNA" target="_blank">Araxis Merge</a>, который я считаю очень достойным.

Единственный минус - это то, что при каждом добавлении нового метатэга, необходимо прописывать его в конфиге компиляции.

Теперь от третьим кадре:
Для того, чтобы в нашем рутовом классе (рутовый он только в случае, если приложение самостоятельное, не модуль), являющимся по-совместительству предзагрузчиком, при компиляции создался третий кадр, конфигурационный файл необходимо дополнить следующим образом:

<em>cfg.xml</em>:
<pre lang="xml" escape="true">
&#60;flex-config&#62;
	&#60;compiler&#62;
		&#60;keep-as3-metadata&#62;
			&#60;name&#62;App&#60;/name&#62;
		&#60;/keep-as3-metadata&#62;
	&#60;/compiler&#62;
	&#60;frames&#62;
		&#60;frame&#62;
			&#60;label&#62;newFrameName&#60;/label&#62;
			&#60;classname&#62;exampleClasses.CustomFrame&#60;/classname&#62;
		&#60;/frame&#62;
	&#60;/frames&#62;
&#60;/flex-config&#62;
</pre>
Класс <strong>exampleClasses.CustomFrame</strong> будет экспортирован во фрэйм "<strong>newFrameName</strong>". Третьим этот фрэйм будет потому, что два уже есть.
По непонятной мне причине, добавлять ноды для четвертого, пятого и т.д. фрэймов - бесполезно.

Теперь смотрим в <em>Main.as</em> на метод <strong>preloaderDoneHandler</strong>. Последние два строки - по-сути, тоже самое, что и в <strong>ru.kozlovskij.preload::Preloader</strong>, т.е. переход на следующий кадр и инициализация соответствующего класса.

Уф.. Вот и все. Наконец, <a title="download src (free))" href="http://FlashImp.ru/files/39/PreloadingDemo1.zip">исходный код (экспорт проекта)</a>.

П.С.: Совет: Не подписывайтесь на <strong>ProgressEvent.PROGRESS</strong> к собственному же <strong>loaderInfo</strong>!]]></description>
			<content:encoded><![CDATA[<p>Для начала несколько слов прелюдии.<br />
Примерно полтора года назад я накодил простенький передзагрузчик (<a title="Dreaming in Flash: Actionscript 3 Preloader" href="http://www.dreaminginflash.com/2007/11/13/actionscript-3-preloader/" target="_blank">аналог</a>), стартующий до инициализации главного класса приложения, и периодически его дополнял и частично переписывал. Таким образом один класс вырос в целую систему, поддерживающую модульную архитектуру, полиморфизм, и предзагрузку необходимых ассетов.<br />
Эту разработку я частенько сам использую в больших многомодульных проектах, где есть одна или несколько библиотек (swc) и огромное количество модулей, эти библиотеки использующие; Предзагрузчик у всех модулей - один, следовательно вынесен в библиотеку, а не клонируется по всей команде разработчиков от проекта к проекту. При этом (частая ситуация) хорошо было бы, что бы все модули приложения могли работать как самостоятельно, так и внутри любого другого модуля, - т.е. полиморфизм. Вот эту ситуацию и возьму за основу.</p>
<p>По-сути, мое решение представляет из себя неслабое универсализированное расширение уже давно описанных метод: <a title="Flash-разработка: Делаем прелоадер для Flex-приложения. AS3." href="http://racer242.blogspot.com/2008/01/flex-as3.html" target="_blank">тут (по-русски)</a>, <a title="BIT-101 Blog: Preloaders in AS3" href="http://www.bit-101.com/blog/?p=946" target="_blank">тут</a> и <a title="Roger Gonzalez: Modular Applications (part 2)" href="http://blogs.adobe.com/rgonzalez/2006/06/modular_applications_part_2.html" target="_blank">тут</a> - настоятельно рекомендую ознакомиться перед продолжением.</p>
<p>Теория.<br />
Добавляя в Главный Класс метадату:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>Frame<span style="color: #000000;">&#40;</span>factoryClass=<span style="color: #990000;">&quot;ru.kozlovskij.preload.Preloader&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span></pre></div></div>

<p>мы получаем вот такой результат:<br />
[Схема с нашим классом]</p>
<p>Но все было бы чудесно, если б не одна проблема: Наш предзагрузчик понятия не имеет об имени главного класса приложения, который ему надо инстанциировать, а заниматься жестким хардкодом в большом проекте - непозволительная роскошь. Первая мысль была такова:<br />
В каждом проекте-модуле использовать в качестве предзагрузчика субкласс того основного, что находится в библиотеке и остается неизменным. В этом субклассе мы просто переопределяем значение protected переменной <strong>MAINCLASS_NAME</strong>, ранее заведенной в основном классе и далее используем ее при инстанциировании нужного нам главного класса приложения. Но это мне вскоре надоело (неудобно) и было придумано более интересное решение:<br />
Предзагрузчик наш остается в библиотеке, не имеет никаких субклассов (можно даже сделать его final). После загрузки всей свифки он сам найдет нужное ему имя класса в метаданных, а в голове главного класса мы просто впишем свой кастомный метатэг:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>App<span style="color: #000000;">&#40;</span>className=<span style="color: #990000;">'ИмяГлавногоКласса'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span></pre></div></div>

<p>Что бы компиллер "увидел" наш метатэг, в параметры компилятора (в свойствах проекта) впишем:<br />
<code>-load-config cfg.xml</code><br />
(про параметры компилятора подробности <a title="About the application compiler options" href="http://livedocs.adobe.com/livecycle/es/sdkHelp/programmer/lcds/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=compilers_09.html" target="_blank">тут</a>)<br />
А в конфиге мы явно укажем, что на наш метатэг стоит обратить внимание:</p>
<p><em>cfg.xml</em>:</p>
<pre lang="xml" escape="true">
&lt;flex-config&gt;
	&lt;compiler&gt;
	&lt;keep-as3-metadata&gt;
	&lt;name&gt;App&lt;/name&gt;
	&lt;/keep-as3-metadata&gt;
	&lt;/compiler&gt;
&lt;/flex-config&gt;
</pre>
<p><em>Main.as</em> - главный класс нашего приложения:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">FrameLabel</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">MovieClip</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span>.<span style="color: #000000; font-weight: bold;">*</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> ru.kozlovskij.core.Application;
	<span style="color: #0033ff; font-weight: bold;">import</span> ru.kozlovskij.preload.Preloader;
&nbsp;
	<span style="color: #3f5fbf;">/**
	* SWF metadata
	*/</span>
	<span style="color: #000000;">&#91;</span>SWF<span style="color: #000000;">&#40;</span><span style="color: #004993;">backgroundColor</span>=<span style="color: #990000;">'0xFFCC00'</span>, <span style="color: #004993;">width</span>=<span style="color: #990000;">'500'</span>, <span style="color: #004993;">height</span>=<span style="color: #990000;">'500'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
&nbsp;
	<span style="color: #3f5fbf;">/**
	* The frameworks must be initialized by SystemManager.
	* This factoryClass will be automatically subclassed by any
	* MXML applications that don't explicitly specify a different
	* factoryClass.
	*
	* NOTE: Minimize the non-Flash classes you import here.
	* Any dependencies of SystemManager have to load in frame 1,
	* before the preloader, or anything else, can be displayed.
	*/</span>
	<span style="color: #000000;">&#91;</span>Frame<span style="color: #000000;">&#40;</span>factoryClass=<span style="color: #990000;">'ru.kozlovskij.preload.Preloader'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #009900;">//[Frame(factoryClass='exampleClasses.MyPreloader')]</span>
&nbsp;
	<span style="color: #3f5fbf;">/**
	* Custom metadata tags
	*/</span>
	<span style="color: #000000;">&#91;</span>App<span style="color: #000000;">&#40;</span><span style="color: #004993;">type</span>=<span style="color: #990000;">'module'</span>, className=<span style="color: #990000;">'Main'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #000000;">&#91;</span>copyrights<span style="color: #000000;">&#40;</span>firstName=<span style="color: #990000;">'Aleksandr'</span>, lastName=<span style="color: #990000;">'Kozlovskij'</span>, <span style="color: #004993;">url</span>=<span style="color: #990000;">'http://Kozlovskij.ru'</span>, blog=<span style="color: #990000;">'http://FlashImp.ru'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Main extends Application
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> Main<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>Preloader.PRELOADER_DONE, preloaderDoneHandler<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> preloaderDoneHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">//initialize...</span>
			<span style="color: #0033ff; font-weight: bold;">for</span><span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span>; i <span style="color: #000000; font-weight: bold;">&amp;</span>lt; <span style="color: #000000;">&#40;</span><span style="color: #004993;">parent</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">MovieClip</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">currentLabels</span>.<span style="color: #004993;">length</span>; <span style="color: #000000; font-weight: bold;">++</span>i<span style="color: #000000;">&#41;</span>
				<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'FrameLabel:'</span>, <span style="color: #990000;">'['</span>, <span style="color: #004993;">FrameLabel</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">parent</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">MovieClip</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">currentLabels</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">name</span>,
					  <span style="color: #990000;">','</span>, <span style="color: #004993;">FrameLabel</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">parent</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">MovieClip</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">currentLabels</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">frame</span>, <span style="color: #990000;">']'</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#40;</span><span style="color: #004993;">parent</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">MovieClip</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">nextFrame</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">parent</span>.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">flash.utils</span>.<span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'exampleClasses.CustomFrame'</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Метод <strong>preloaderDoneHandler</strong> вызывается, когда от предзагрузчика мы получаем событие об окончании загрузки всего необходимого (+ассеты?). В <strong>preloaderDoneHandler</strong> мы, удовлетворения ради, выводим в трэйс все, имеющиеся в нашем распоряжении (в родителе-предзагрузчике) фрэймы. В последних двух строках мы переходим в третий кадр и инстанциируем класс, который был загружен последним - об этом чуток ниже.<br />
Во многих моих реализациях данного подхода я либо создавал в <strong>Main</strong> классе метод, возвращающий массив урлов к тому, что еще необходимо загрузить, что было несколько криво и не гибко, либо записывал эту информацию в метаданные, что позволяло предзагрузчику все необходимое скачать еще до инициализации главного класса, а он в свою очередь рождался "на всем готовом". Нюансы реализацию такой инициализации приложения я покажу позже, а сейчас - простой пример того самого предзагрузчика:</p>
<p><em>Preloader.as</em> - собственно, сам прелоудер:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> ru.kozlovskij.preload
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">DisplayObject</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">MovieClip</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">StageAlign</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">StageScaleMode</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.system</span>.<span style="color: #004993;">ApplicationDomain</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span>.<span style="color: #004993;">ByteArray</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> ru.etcs.utils.ClassExplorer;
&nbsp;
	<span style="color: #000000;">&#91;</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">name</span>=<span style="color: #990000;">&quot;preloaderDone&quot;</span>, <span style="color: #004993;">type</span>=<span style="color: #990000;">&quot;ru.kozlovskij.preload.Preloader&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Preloader extends <span style="color: #004993;">MovieClip</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> static const PRELOADER_DONE<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">'preloaderDone'</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> MAINCLASS_NAME<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> preloaderGraphics<span style="color: #000000; font-weight: bold;">:</span>IPreloaderGraphics;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> Main<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Class</span>;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> main<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">DisplayObject</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #6699cc; font-weight: bold;">var</span> _standalone<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #0033ff; font-weight: bold;">true</span>;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> standalone<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span>
		<span style="color: #000000;">&#123;</span><span style="color: #0033ff; font-weight: bold;">return</span> _standalone;<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> Preloader<span style="color: #000000;">&#40;</span>preloaderGraphics<span style="color: #000000; font-weight: bold;">:</span>IPreloaderGraphics = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">stop</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">this</span>.preloaderGraphics = preloaderGraphics <span style="color: #000000; font-weight: bold;">?</span> preloaderGraphics <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">new</span> PreloaderGraphics<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">stage</span><span style="color: #000000;">&#41;</span>
				<span style="color: #004993;">stage</span>.<span style="color: #004993;">scaleMode</span> = <span style="color: #004993;">StageScaleMode</span>.<span style="color: #004993;">NO_SCALE</span>,
				<span style="color: #004993;">stage</span>.<span style="color: #004993;">align</span> = <span style="color: #004993;">StageAlign</span>.<span style="color: #004993;">TOP_LEFT</span>,
				<span style="color: #004993;">stage</span>.<span style="color: #004993;">frameRate</span> = <span style="color: #000000; font-weight:bold;">31</span>,
				createGraphics<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>,
				<span style="color: #004993;">stage</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">RESIZE</span>, resizeHandler<span style="color: #000000;">&#41;</span>;
			<span style="color: #0033ff; font-weight: bold;">else</span>
				_standalone = <span style="color: #0033ff; font-weight: bold;">false</span>;
&nbsp;
			<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">ENTER_FRAME</span>, enterFrameHandler<span style="color: #000000;">&#41;</span>;
&nbsp;
			resizeHandler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> createGraphics<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>preloaderGraphics <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">DisplayObject</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> enterFrameHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">//percent = current / total</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> percent<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #004993;">root</span>.<span style="color: #004993;">loaderInfo</span>.<span style="color: #004993;">bytesLoaded</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #004993;">root</span>.<span style="color: #004993;">loaderInfo</span>.<span style="color: #004993;">bytesTotal</span>;
			preloaderGraphics.percent = percent <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">100</span>;
&nbsp;
			<span style="color: #009900;">//trace(Math.round(100 * percent) + '%');</span>
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">framesLoaded</span> == <span style="color: #004993;">totalFrames</span><span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				<span style="color: #004993;">removeEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">ENTER_FRAME</span>, enterFrameHandler<span style="color: #000000;">&#41;</span>;
&nbsp;
				<span style="color: #009900;">//Move to the next frame when we're done</span>
				<span style="color: #009900;">//Moving to frame 1(!)</span>
				<span style="color: #004993;">nextFrame</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
				preinit<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> resizeHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span> = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			preloaderGraphics.<span style="color: #004993;">x</span> = <span style="color: #004993;">stage</span> <span style="color: #000000; font-weight: bold;">?</span> <span style="color: #004993;">stage</span>.<span style="color: #004993;">stageWidth</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span> <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">root</span>.<span style="color: #004993;">width</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span>,
			preloaderGraphics.<span style="color: #004993;">y</span> = <span style="color: #004993;">stage</span> <span style="color: #000000; font-weight: bold;">?</span> <span style="color: #004993;">stage</span>.<span style="color: #004993;">stageHeight</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span> <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">root</span>.<span style="color: #004993;">height</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> preinit<span style="color: #000000;">&#40;</span>mainclass_name_from_metadata<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> needThrow<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #0033ff; font-weight: bold;">true</span>;
			MAINCLASS_NAME = mainclass_name_from_metadata <span style="color: #000000; font-weight: bold;">?</span> mainclass_name_from_metadata <span style="color: #000000; font-weight: bold;">:</span>
							 MAINCLASS_NAME <span style="color: #000000; font-weight: bold;">?</span> MAINCLASS_NAME <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">null</span>;
			MAINCLASS_NAME <span style="color: #000000; font-weight: bold;">?</span> <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #000000;">&#40;</span>needThrow = <span style="color: #0033ff; font-weight: bold;">false</span>, getMETAMainClassName<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>needThrow <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #000000; font-weight: bold;">!</span>MAINCLASS_NAME<span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				<span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #0033ff; font-weight: bold;">throw</span> <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Error</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">': Main Class Definition eq null'</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> has<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #004993;">ApplicationDomain</span>.<span style="color: #004993;">currentDomain</span>.<span style="color: #004993;">hasDefinition</span><span style="color: #000000;">&#40;</span>MAINCLASS_NAME<span style="color: #000000;">&#41;</span>;
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>has<span style="color: #000000;">&#41;</span><span style="color: #009900;">//if main app</span>
				Main = <span style="color: #004993;">ApplicationDomain</span>.<span style="color: #004993;">currentDomain</span>.<span style="color: #004993;">getDefinition</span><span style="color: #000000;">&#40;</span>MAINCLASS_NAME<span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span>;
			<span style="color: #0033ff; font-weight: bold;">else</span>
			<span style="color: #000000;">&#123;</span>
				has = <span style="color: #004993;">loaderInfo</span>.<span style="color: #004993;">applicationDomain</span>.<span style="color: #004993;">hasDefinition</span><span style="color: #000000;">&#40;</span>MAINCLASS_NAME<span style="color: #000000;">&#41;</span>;
				<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>has<span style="color: #000000;">&#41;</span><span style="color: #009900;">//if module app</span>
					Main = <span style="color: #004993;">loaderInfo</span>.<span style="color: #004993;">applicationDomain</span>.<span style="color: #004993;">getDefinition</span><span style="color: #000000;">&#40;</span>MAINCLASS_NAME<span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span>;
			<span style="color: #000000;">&#125;</span>
&nbsp;
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>has<span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				<span style="color: #009900;">//and instantiate our Main class</span>
				main = <span style="color: #0033ff; font-weight: bold;">new</span> Main<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
				<span style="color: #009900;">//get urls, whot need to additional preloading before starting application (in next post..)</span>
&nbsp;
				<span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
			<span style="color: #0033ff; font-weight: bold;">else</span>
			<span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>needThrow<span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				<span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #0033ff; font-weight: bold;">throw</span> <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Error</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">': Main Class Definition NOT FOUND'</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">//finally we add main class to the DisplayList and dispatching event</span>
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>main <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">DisplayObject</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Event</span><span style="color: #000000;">&#40;</span>PRELOADER_DONE<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #009900;">//stage.addChild(main as DisplayObject) - only if we make a standalone app.</span>
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900;">//killing &amp;amp; clearing preloaderGraphics :)</span>
			IPreloaderGraphics<span style="color: #000000;">&#40;</span><span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span>preloaderGraphics <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">DisplayObject</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			standalone <span style="color: #000000; font-weight: bold;">?</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">stage</span>.<span style="color: #004993;">removeEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">RESIZE</span>, resizeHandler<span style="color: #000000;">&#41;</span>, <span style="color: #004993;">stage</span>.<span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">null</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #009900;">//-----------------------------------------------------//</span>
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> getMETAMainClassName<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> bytes<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">ByteArray</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">ByteArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				bytes.<span style="color: #004993;">objectEncoding</span> = <span style="color: #000000; font-weight:bold;">3</span>;
				bytes.<span style="color: #004993;">writeBytes</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loaderInfo</span>.bytes<span style="color: #000000;">&#41;</span>;
				bytes.<span style="color: #004993;">position</span> = <span style="color: #000000; font-weight:bold;">0</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> explorer<span style="color: #000000; font-weight: bold;">:</span>ClassExplorer = <span style="color: #0033ff; font-weight: bold;">new</span> ClassExplorer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				explorer.<span style="color: #004993;">loadBytes</span><span style="color: #000000;">&#40;</span>bytes<span style="color: #000000;">&#41;</span>;
				explorer.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, explorerWorkCompleteHandler<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> explorerWorkCompleteHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> explorer<span style="color: #000000; font-weight: bold;">:</span>ClassExplorer = e.<span style="color: #004993;">target</span> <span style="color: #0033ff; font-weight: bold;">as</span> ClassExplorer;
			<span style="color: #6699cc; font-weight: bold;">var</span> xml<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">XML</span> = explorer.getDefinitionInfo<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #009900;">//trace(xml.toXMLString());</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> className<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>;
			className = xml.definition<span style="color: #3f5fbf;">/*.(@name == 'frame2')*/</span>.script.classTrait.metadata.<span style="color: #000000;">&#40;</span>@<span style="color: #004993;">name</span> == <span style="color: #990000;">'App'</span><span style="color: #000000;">&#41;</span>.arg.<span style="color: #000000;">&#40;</span>@key == <span style="color: #990000;">'className'</span><span style="color: #000000;">&#41;</span>.@<span style="color: #004993;">value</span>.<span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			preinit<span style="color: #000000;">&#40;</span>className<span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Как видно, в данной реализации я оставил возможность наследовать этот класс и переопределять значение переменной <strong>MAINCLASS_NAME</strong>. Так же в конструктор можно передать экземпляр визуализатора процесса загрузки, реализующий интерфейс <strong>IPreloaderGraphics</strong>. По умолчанию создается инстанс <strong>PreloaderGraphics</strong> - простейший субкласс <strong>DisplayObject</strong>'a, содержащий в себе текстовое поле для отображения процентов - это я тоже упростил:)</p>
<p><em>ru.kozlovskij.preload.PreloaderGraphics</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> ru.kozlovskij.preload
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.text</span>.<span style="color: #004993;">TextField</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.text</span>.<span style="color: #004993;">TextFormat</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.text</span>.<span style="color: #004993;">TextFormatAlign</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PreloaderGraphics extends <span style="color: #004993;">Sprite</span> implements IPreloaderGraphics
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">text</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">TextField</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">TextField</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> PreloaderGraphics<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">text</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #004993;">text</span>.<span style="color: #004993;">defaultTextFormat</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">TextFormat</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'Tahoma'</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">text</span>.<span style="color: #004993;">defaultTextFormat</span>.<span style="color: #004993;">align</span> = <span style="color: #004993;">TextFormatAlign</span>.<span style="color: #004993;">CENTER</span>,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">defaultTextFormat</span>.<span style="color: #004993;">size</span> = <span style="color: #000000; font-weight:bold;">13</span>,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">defaultTextFormat</span>.<span style="color: #004993;">letterSpacing</span> = <span style="color: #000000; font-weight:bold;">1</span>,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">defaultTextFormat</span>.<span style="color: #004993;">bold</span> = <span style="color: #0033ff; font-weight: bold;">true</span>;
&nbsp;
			<span style="color: #004993;">text</span>.<span style="color: #004993;">borderColor</span> = <span style="color: #004993;">text</span>.<span style="color: #004993;">textColor</span> = 0x0,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">selectable</span> = <span style="color: #000000; font-weight: bold;">!</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">text</span>.<span style="color: #004993;">border</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">width</span> = <span style="color: #000000; font-weight:bold;">100</span>,
			<span style="color: #004993;">text</span>.<span style="color: #004993;">height</span> = <span style="color: #000000; font-weight:bold;">50</span>;
&nbsp;
			percent = <span style="color: #000000; font-weight:bold;">0</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _percent<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0</span>;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> percent<span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			_percent = <span style="color: #004993;">value</span>;
			<span style="color: #004993;">text</span>.<span style="color: #004993;">text</span> = <span style="color: #990000;">'Loading...<span style="">\n</span>'</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #004993;">uint</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">'%'</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> percent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> _percent;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">text</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Вернемся к <strong>ru.kozlovskij.preload.Preloader</strong>. Как это все работает?<br />
Запускается конструктор, подписываемся на событие <strong>Event.ENTER_FRAME</strong> и постоянно проверяем, не завершилась ли загрузка; Загрузка завершена, находим в метаданные и в них - имя главного класса (<strong>preinit</strong>-&gt;<strong>getMETAMainClassName</strong>-&gt;<strong>explorerWorkCompleteHandler</strong>-&gt;<strong>preinit</strong>), инициализируем главный класс, не забыв перед этим перескочить на второй кадр, - вот такая последовательность.<br />
В демонстрируемой реализации в качестве "поисковика метадаты" я использовал <strong>ClassExplorer</strong>, за что отдельное спасибо <a title=" Записки о Flash:  ClassExplorer" href="http://etcs.ru/blog/as3/classexplorer/" target="_blank">автору</a>.<br />
Для наших целей пришлось немного его подправить. Не помню уже где и что исправлял - интересующимся поможет любой мержер, например, <a title="Araxis Merge" href="http://www.araxis.com/merge/?gclid=CIzW9-b97J4CFUQM3god2REvNA" target="_blank">Araxis Merge</a>, который я считаю очень достойным.</p>
<p>Единственный минус - это то, что при каждом добавлении нового метатэга, необходимо прописывать его в конфиге компиляции.</p>
<p>Теперь от третьим кадре:<br />
Для того, чтобы в нашем рутовом классе (рутовый он только в случае, если приложение самостоятельное, не модуль), являющимся по-совместительству предзагрузчиком, при компиляции создался третий кадр, конфигурационный файл необходимо дополнить следующим образом:</p>
<p><em>cfg.xml</em>:</p>
<pre lang="xml" escape="true">
&lt;flex-config&gt;
	&lt;compiler&gt;
		&lt;keep-as3-metadata&gt;
			&lt;name&gt;App&lt;/name&gt;
		&lt;/keep-as3-metadata&gt;
	&lt;/compiler&gt;
	&lt;frames&gt;
		&lt;frame&gt;
			&lt;label&gt;newFrameName&lt;/label&gt;
			&lt;classname&gt;exampleClasses.CustomFrame&lt;/classname&gt;
		&lt;/frame&gt;
	&lt;/frames&gt;
&lt;/flex-config&gt;
</pre>
<p>Класс <strong>exampleClasses.CustomFrame</strong> будет экспортирован во фрэйм "<strong>newFrameName</strong>". Третьим этот фрэйм будет потому, что два уже есть.<br />
По непонятной мне причине, добавлять ноды для четвертого, пятого и т.д. фрэймов - бесполезно.</p>
<p>Теперь смотрим в <em>Main.as</em> на метод <strong>preloaderDoneHandler</strong>. Последние два строки - по-сути, тоже самое, что и в <strong>ru.kozlovskij.preload::Preloader</strong>, т.е. переход на следующий кадр и инициализация соответствующего класса.</p>
<p>Уф.. Вот и все. Наконец, <a title="download src (free))" href="http://FlashImp.ru/files/39/PreloadingDemo1.zip">исходный код (экспорт проекта)</a>.</p>
<p>П.С.: Совет: Не подписывайтесь на <strong>ProgressEvent.PROGRESS</strong> к собственному же <strong>loaderInfo</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/39/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Pixel Bender batch compiler runner</title>
		<link>http://flashimp.ru/21</link>
		<comments>http://flashimp.ru/21#comments</comments>
		<pubDate>Mon, 23 Nov 2009 15:30:06 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Накодил]]></category>
		<category><![CDATA[assistant]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FP10]]></category>
		<category><![CDATA[Pixel Bender]]></category>
		<category><![CDATA[VBS]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=21</guid>
		<description><![CDATA[Написал VBS скриптец для пакетной компиляции .pbk файлов. Работает только под окнами.
Как работает: Принимает пачку входящих параметров - [fullUrlFile.pbk ...], выбрасывает все, что не .pbk, для каждого вызывает компилятор.
Принимает необязательные параметры:

-pb-C:\url\to\pbutil.exe
-bin-C:\url\to\

Написано кривовато, ибо в VBS я на момент написания абсолютно ничего не смыслел.
Применять эту штуку удобно в случае, если мы пишем и отлаживаем код в [...]]]></description>
			<content:encoded><![CDATA[<p>Написал VBS скриптец для пакетной компиляции .pbk файлов. <strong>Работает только под окнами</strong>.</p>
<p>Как работает: Принимает пачку входящих параметров - [fullUrlFile.pbk ...], выбрасывает все, что не .pbk, для каждого вызывает компилятор.</p>
<p>Принимает необязательные параметры:</p>
<ul>
<li>-pb-C:\url\to\pbutil.exe</li>
<li>-bin-C:\url\to\</li>
</ul>
<p>Написано кривовато, ибо в VBS я на момент написания абсолютно ничего не смыслел.<br />
Применять эту штуку удобно в случае, если мы пишем и отлаживаем код в Pixel Bender Toolkit, а самих кернелов (.pbk) в проекте много. Приходится либо вызывать компиляцию для каждого обновленного ручками из Pixel Bender Toolkit-а, либо, если пользуемся плагином для <a title="eclipse" href="http://www.eclipse.org/">Eclipse</a> под названием <a title="PBDT" href="http://blog.joa-ebert.com/pbdt/">PBDT</a>, то сохранять каждый pbk, не, что тоже долго и неприятно.</p>
<p>Решение для Eclipse/<a title="Flex Builder 3" href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=flexbuilder3">FB</a>: Просто подключаем этот vbs-скрипт как екстернал-компилятор и указываем в параметрах папку, куда следует складывать готовые .pbj. И все обновившиеся кернелы скомпилятся при следующем билде.</p>
<p>Конкретика:</p>
<ul>
<li> Создаем в Project &gt; Properties &gt; Builders &gt; .. новый билдер, называем его PBBCR;</li>
<li>Заменяем свой .externalToolBuilders\PBBCR.launch на аналог из скачанного <a title="PBBCR" href="http://flashimp.ru/files/21/PBBCR.rar">архива</a>;</li>
<li>Снова открываем Project &gt; Properties &gt; Builders &gt; PBBCR &gt; в поле Arguments первым параметром пишем/правим путь к PBBCR.vbs;</li>
<li>(опционально) Там же в поле Arguments пишем/правим путь к pbutil.exe (он есть в папке Pixel Bender-a начиная с 1.5.1 версии) и путь к папке, куда складывать бинарники .pbj.</li>
<li>Не забываем в списке билдеров Project &gt; Properties &gt; Builders &gt; поставить наш PBBCR на самый верх, дабы он срабатывал первый.</li>
</ul>
<p>Сам скрипт, пример .project, пример .launch в <a title="PBBCR" href="http://flashimp.ru/files/21/PBBCR.rar">архиве</a>.</p>
<p>Единственный нюанс: Если сами указываем output-папку и она реально не существует, ее необходимо создать самостоятельно - скрипт сам не умеет творить такие чудеса.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/21/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Machinarium</title>
		<link>http://flashimp.ru/11</link>
		<comments>http://flashimp.ru/11#comments</comments>
		<pubDate>Fri, 20 Nov 2009 13:23:06 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[ART]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=11</guid>
		<description><![CDATA[Шедевральная редкость от чешских творцов Amanita Design.
Друг посоветовал, я в восторге, и рекомендую это чудо вам.
Игрушка, квест в стиле Full Pipe.

Конечно, на флэше. Сайт продукта.
]]></description>
			<content:encoded><![CDATA[<p>Шедевральная редкость от чешских творцов <a title="creators" href="http://www.snowball.ru/machinarium/?page=creators" target="_blank">Amanita Design</a>.<br />
Друг посоветовал, я в восторге, и рекомендую это чудо вам.<br />
Игрушка, квест в стиле <a title="Полная Труба" href="http://www.pipestudio.ru/fullpipe/index.php?Lang=ru" target="_blank">Full Pipe</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7096871&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7096871&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Конечно, на флэше. <a title="machinarium" href="http://www.snowball.ru/machinarium/" target="_blank">Сайт продукта</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/11/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FlashImp alive!</title>
		<link>http://flashimp.ru/4</link>
		<comments>http://flashimp.ru/4#comments</comments>
		<pubDate>Tue, 10 Nov 2009 15:26:15 +0000</pubDate>
		<dc:creator>Александр Козловский</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://flashimp.ru/?p=4</guid>
		<description><![CDATA[Ожил и сказал всем "Здрасссте!".
Архив старого блога лежит тут.
]]></description>
			<content:encoded><![CDATA[<p>Ожил и сказал всем "Здрасссте!".</p>
<p>Архив старого блога лежит <a href="http://flashimp.ru/old_flashimp_archive/" target="_blank">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flashimp.ru/4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
