<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>блохи</title>
	<link>http://blog.pirrest.com</link>
	<description>Чому блохи? Тому що чухаються :) Інколи флеш видає щось нове і подекуди не логічне. І це чухається, доки не зрозумієш чому так, а не інакше. А розчухати самотужки не завжди виходить, тож пропоную ловити бліх разом :)</description>
	<pubDate>Sun, 15 Jun 2008 15:33:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>uk</language>
			<item>
		<title>Flex Builder іноді &#8220;не бачить&#8221; класу</title>
		<link>http://blog.pirrest.com/2008/06/15/84/</link>
		<comments>http://blog.pirrest.com/2008/06/15/84/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 14:50:38 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[Знайдені блохи]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/06/15/84/</guid>
		<description><![CDATA[Якщо умовою для оператору if є результат функції, та тіло оператору починається з дужки &#8220;(&#8221;, то Flex Builder не підкаже ім&#8217;я класу в якому є подібний if.
Ось приклад:

package

{


public class Flea
{

public function Flea()
{

if(this.hasOwnProperty(&#8221;startJump&#8221;))

(this as Object).startJump()




}


}


}

В іншому класі того ж проекту при натисканні Ctrl+Space ми не побачимо клас Flea.

Також в самому класі не будуть працювати більшість можливостей [...]]]></description>
			<content:encoded><![CDATA[<p>Якщо умовою для оператору if є результат функції, та тіло оператору починається з дужки &#8220;(&#8221;, то Flex Builder не підкаже ім&#8217;я класу в якому є подібний if.</p>
<p>Ось приклад:</p>
<ol class="code">
<li>package
<ol>
<li>{</li>
</ol>
<ol>
<li>public class Flea</li>
<li>{
<ol>
<li>public function Flea()</li>
<li>{
<ol>
<li>if(this.hasOwnProperty(&#8221;startJump&#8221;))
<ol>
<li>(this as Object).startJump()</li>
</ol>
</li>
</ol>
</li>
<li>}</li>
</ol>
</li>
<li>}</li>
</ol>
</li>
<li>}</li>
</ol>
<p>В іншому класі того ж проекту при натисканні Ctrl+Space ми не побачимо клас Flea.</p>
<p><img src="http://blog.pirrest.com/wp-content/uploads/2008/06/1.gif" alt="1.gif" /></p>
<p>Також в самому класі не будуть працювати більшість можливостей Flex Builder, як наприклад перехід по F3, або Ctrl+o.</p>
<p>Такого не станеться, якщо використовувати фігурні дужки для обрамлення тіла оператора if <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol class="code">
<li>if(this.hasOwnProperty(&#8221;startJump&#8221;))</li>
<li>{
<ol>
<li>(this as Object).startJump()</li>
</ol>
</li>
<li>}</li>
</ol>
<p>Результат:</p>
<p><img src="http://blog.pirrest.com/wp-content/uploads/2008/06/2.gif" alt="2.gif" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/06/15/84/feed/</wfw:commentRss>
		</item>
		<item>
		<title>getter/setter + (increment &#124;&#124; decrement) = жук у компіляторі</title>
		<link>http://blog.pirrest.com/2008/05/30/83/</link>
		<comments>http://blog.pirrest.com/2008/05/30/83/#comments</comments>
		<pubDate>Fri, 30 May 2008 13:56:28 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[ActionScript 3.0]]></category>

		<category><![CDATA[Flash IDE]]></category>

		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[Знайдені блохи]]></category>

		<category><![CDATA[Спіймані блохи]]></category>

		<category><![CDATA[++]]></category>

		<category><![CDATA[--]]></category>

		<category><![CDATA[compile error]]></category>

		<category><![CDATA[decrement]]></category>

		<category><![CDATA[getter]]></category>

		<category><![CDATA[increment]]></category>

		<category><![CDATA[setter]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/05/30/83/</guid>
		<description><![CDATA[Маємо змінну задану за допомогою get та set функцій:

var _num:Number = 0;
function get num():Number
{

    return _num;


}
function set num(value:Number):void
{

    _num = value;


}

Створюємо іще одну змінну:
var num2:Number = num++;
Отримуєм помилку компіляції:
1067: Implicit coercion of a value of type void to an unrelated type Number.
Вважаю що виходить так:
var num2:Number = set num(get [...]]]></description>
			<content:encoded><![CDATA[<p>Маємо змінну задану за допомогою get та set функцій:</p>
<ol class="code">
<li>var _num:Number = 0;</li>
<li>function get num():Number</li>
<li>{
<ol>
<li>    return _num;</li>
</ol>
</li>
<li>}</li>
<li>function set num(value:Number):void</li>
<li>{
<ol>
<li>    _num = value;</li>
</ol>
</li>
<li>}</li>
</ol>
<p>Створюємо іще одну змінну:</p>
<p><code>var num2:Number = num++;</code></p>
<p>Отримуєм помилку компіляції:</p>
<p><code>1067: Implicit coercion of a value of type void to an unrelated type Number.</code></p>
<p>Вважаю що виходить так:</p>
<p><code>var num2:Number = set num(get num() +1);</code></p>
<p>А так як результат set num()  є <strong>void</strong>, то ми і отримуємо помилку.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/05/30/83/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Загадка про switch + XML</title>
		<link>http://blog.pirrest.com/2008/05/29/82/</link>
		<comments>http://blog.pirrest.com/2008/05/29/82/#comments</comments>
		<pubDate>Thu, 29 May 2008 09:30:35 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[Загадки]]></category>

		<category><![CDATA[switch]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/05/29/82/</guid>
		<description><![CDATA[Код:

var xx:XML = &#60;root attr=&#8221;1&#8243;&#62;&#60;/root&#62;;
switch(xx.@attr)
{

case 1:

trace(&#8221;Case: 1&#8243;);


break;
case &#8220;1&#8243;:

trace(&#8221;Case: 2&#8243;);


break;
default:

trace(&#8221;Default&#8221;);




}

Що буде в output?
]]></description>
			<content:encoded><![CDATA[<p>Код:</p>
<ol class="code">
<li>var xx:XML = &lt;root attr=&#8221;1&#8243;&gt;&lt;/root&gt;;</li>
<li>switch(xx.@attr)</li>
<li>{
<ol>
<li>case 1:
<ol>
<li>trace(&#8221;Case: 1&#8243;);</li>
</ol>
</li>
<li>break;</li>
<li>case &#8220;1&#8243;:
<ol>
<li>trace(&#8221;Case: 2&#8243;);</li>
</ol>
</li>
<li>break;</li>
<li>default:
<ol>
<li>trace(&#8221;Default&#8221;);</li>
</ol>
</li>
</ol>
</li>
<li>}</li>
</ol>
<p>Що буде в output?</p>
<p> <a href="http://blog.pirrest.com/2008/05/29/82/#more-82" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/05/29/82/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#60;mx:Binding /&#62;</title>
		<link>http://blog.pirrest.com/2008/05/28/81/</link>
		<comments>http://blog.pirrest.com/2008/05/28/81/#comments</comments>
		<pubDate>Wed, 28 May 2008 14:39:14 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[MXML]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[Binding]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/05/28/81/</guid>
		<description><![CDATA[Доволі часто ми створюємо глобальну змінну (в рамках mxml-компоненту), яка зв&#8217;язується (binding) зі змінною внутрішнього компоненту:

&#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&#62;
&#60;mx:Canvas xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243;&#62;

&#60;mx:TextInput text=&#8221;{textInputText}&#8221; /&#62;
&#60;mx:String id=&#8221;textInputText&#8221; /&#62;


&#60;/mx:Canvas&#62;

Але при цьому зв&#8217;язування є одностороннім, тобто, в наведеному прикладі, якщо користувач введе текст в поле, то змінна textInputText не зміниться. На допомогу приходить теґ &#60;Binding&#62;.

&#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&#62;
&#60;mx:Canvas xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243;&#62;

&#60;mx:TextInput [...]]]></description>
			<content:encoded><![CDATA[<p>Доволі часто ми створюємо глобальну змінну (в рамках mxml-компоненту), яка зв&#8217;язується (binding) зі змінною внутрішнього компоненту:</p>
<ol class="code">
<li>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</li>
<li>&lt;mx:Canvas xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243;&gt;
<ol>
<li>&lt;mx:TextInput text=&#8221;{<strong>textInputText</strong>}&#8221; /&gt;</li>
<li>&lt;mx:String id=&#8221;<strong>textInputText</strong>&#8221; /&gt;</li>
</ol>
</li>
<li>&lt;/mx:Canvas&gt;</li>
</ol>
<p>Але при цьому зв&#8217;язування є одностороннім, тобто, в наведеному прикладі, якщо користувач введе текст в поле, то змінна textInputText не зміниться. На допомогу приходить теґ &lt;Binding&gt;.</p>
<ol class="code">
<li>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</li>
<li>&lt;mx:Canvas xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243;&gt;
<ol>
<li>&lt;mx:TextInput <strong>id=&#8221;ti&#8221;</strong> text=&#8221;{textInputText}&#8221; /&gt;</li>
<li>&lt;mx:String id=&#8221;textInputText&#8221; /&gt;</li>
<li>&lt;mx:Binding source=&#8221;<strong>ti.text</strong>&#8221; destination=&#8221;<strong>textInputText</strong>&#8221; /&gt;</li>
</ol>
</li>
<li>&lt;/mx:Canvas&gt;</li>
</ol>
<p>Єдиний мінус в тому, що треба вигадувати id для TextInput <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><font color="#008000">Оновлення:</font></strong></p>
<p>Виявляється, що можна зробити простіше <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol class="code">
<li>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</li>
<li>&lt;mx:Canvas xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; width=&#8221;400&#8243; height=&#8221;300&#8243;&gt;
<ol>
<li>&lt;mx:TextInput id=&#8221;ti&#8221; text=&#8221;{textInputText}&#8221; /&gt;</li>
<li>&lt;mx:String id=&#8221;textInputText&#8221;&gt;<strong>{ti.text}</strong>&lt;/mx:String&gt;</li>
</ol>
</li>
<li>&lt;/mx:Canvas&gt;</li>
</ol>
<p>Це не позбавляє нас від вигадування id, але зберігає одну строчку коду. А &lt;binding&gt; можна використовувати для зв&#8217;язування до більш ніж одного об&#8217;єкту.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/05/28/81/feed/</wfw:commentRss>
		</item>
		<item>
		<title>flash.trace.Trace</title>
		<link>http://blog.pirrest.com/2008/05/26/80/</link>
		<comments>http://blog.pirrest.com/2008/05/26/80/#comments</comments>
		<pubDate>Mon, 26 May 2008 12:20:05 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[ActionScript 3.0]]></category>

		<category><![CDATA[Flash IDE]]></category>

		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[flash.trace.Trace]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/05/26/80/</guid>
		<description><![CDATA[Так, є такий клас, дуже непримітний, але може бути дуже корисним  
Він робить дивовижну річ. Після &#8220;запуску&#8221; видає в output імена УСІХ! методів які виконуються, з іменами класів, до яких належать ці методи. Клас не документовано, тобто як з ним працювати не знаю (google теж нічого не каже), але методами спроб та помилок щось [...]]]></description>
			<content:encoded><![CDATA[<p>Так, є такий клас, дуже непримітний, але може бути дуже корисним <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Він робить дивовижну річ. Після &#8220;запуску&#8221; видає в output імена УСІХ! методів які виконуються, з іменами класів, до яких належать ці методи. Клас не документовано, тобто як з ним працювати не знаю (google теж нічого не каже), але методами спроб та помилок щось таки вдалось зрозуміти.</p>
<p>Ось усі його методи (клас статичний, тобто усі методи статичні):</p>
<ul>
<li>Trace.setLevel(l:int, target:int=2):Object</li>
<li>Trace.getLevel(target:int=2):int</li>
<li>Trace.setListener(f:Function):Object</li>
<li>Trace.getListener():Function;</li>
</ul>
<h3>Trace.setLevel(l:int, target:int=2):Object</h3>
<p>Виставляє рівень віщування, та ціль віщування.</p>
<p>Першим параметром може бути одна з констант:</p>
<ul>
<li><strong>Trace.METHODS_AND_LINES_WITH_ARGS = 4</strong>
<ul>
<li>Назва методу з вхідними параметрами та номер строчки в коді зі шляхом до класу, в якому виконався метод</li>
</ul>
</li>
<li><strong>Trace.METHODS_AND_LINES = 3</strong>
<ul>
<li>Назва методу та номер строчки</li>
</ul>
</li>
<li><strong>Trace.METHODS_WITH_ARGS = 2</strong>
<ul>
<li>Назва методу з вхідними параметрами</li>
</ul>
</li>
<li><strong>Trace.METHODS = 1</strong>
<ul>
<li>Тільки назва методу</li>
</ul>
</li>
<li><strong>Trace.OFF = 0</strong>
<ul>
<li>Вимкнуто</li>
</ul>
</li>
</ul>
<p>Другим параметром може бути:</p>
<ul>
<li><strong>Trace.LISTENER = 2</strong>
<ul>
<li>Віщувати у функцію, яка буда додана, за допомогою setListener().</li>
</ul>
</li>
<li><strong>Trace.FILE = 1</strong>
<ul>
<li>Віщувати у output.</li>
</ul>
</li>
</ul>
<h3><strong>Trace.getLevel(target:int=2):int</strong></h3>
<p>Повертає рівень віщування для цілі.</p>
<h3><strong>Trace.setListener(f:Function):Object</strong></h3>
<p>Виставляє функцію для віщування при цілі віщування =  Trace.LISTENER.</p>
<p>Функція має приймати 4 параметри:</p>
<ol class="code">
<li>private function traceListener(
<ol>
<li>fileInfo:String,</li>
<li>lineNumber:String,</li>
<li>classAndMethod:String,</li>
<li>methodArguments:String</li>
</ol>
</li>
<li>):void</li>
</ol>
<p><strong>fileInfo</strong> - тека, де знаходиться файл + &#8220;;&#8221; + щось іще (в мене була пуста строчка) <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> + &#8220;;&#8221; + ім&#8217;я файлу.</p>
<p>Приклад: &#8220;D:\Projects\ForTestsF3\src;;ForTestsF3.mxml&#8221;</p>
<p><strong>lineNumber</strong> - номер строчки</p>
<p><strong>classAndMethod</strong> - повне ім&#8217;я класу + (&#8221;/&#8221; || &#8220;$/&#8221; ) + ім&#8217;я методу.</p>
<p>Приклади: &#8220;flash.display::DisplayObjectContainer/addChild&#8221;</p>
<p>&#8220;flash.trace::Trace$/setListener&#8221; - &#8220;$/&#8221; використовується, якщо визваний метод - статичний</p>
<p><strong>methodArguments</strong> -вхідні параметри методу, розділені комою (,). Але якщо параметри методу задано за допомогою rest оператору (&#8230;), то вони показані не будуть.</p>
<h3><strong>Trace.getListener():Function</strong></h3>
<p>Повертає заданий раніше лістенер.</p>
<p>Ось приклад:</p>
<ol class="code">
<li>import flash.trace.Trace;</li>
<li>function test(t:String):String</li>
<li>{
<ol>
<li>return t;</li>
</ol>
</li>
<li>}</li>
<li>Trace.setLevel(Trace.METHODS_WITH_ARGS, Trace.FILE);</li>
<li>var st:String = &#8220;hello!&#8221;;</li>
<li>test(st);</li>
<li>stop();</li>
</ol>
<p>В output отримаєте:</p>
<ol class="code">
<li>14554003 AVMINF: MTHD Untitled_fla::MainTimeline/test (&#8221;hello!&#8221;) @ 0&#215;042F0300</li>
<li>4554004 AVMINF: MTHD flash.display::MovieClip/stop () @ 0&#215;0EF004D0</li>
</ol>
<p><strong>Дуже дякую 7thsky за допомогу!</strong><cite></cite></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/05/26/80/feed/</wfw:commentRss>
		</item>
		<item>
		<title>[AIR] NativeMenu + SystemTrayIcon - MouseEvent.RIGHT_CLICK = та що з маком</title>
		<link>http://blog.pirrest.com/2008/04/15/79/</link>
		<comments>http://blog.pirrest.com/2008/04/15/79/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 09:20:28 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[AIR]]></category>

		<category><![CDATA[Знайдені блохи]]></category>

		<category><![CDATA[NativeMenu]]></category>

		<category><![CDATA[SystemTrayIcon]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/04/15/79/</guid>
		<description><![CDATA[Так, в AIR є можливість використовувати своє контекстне меню, додавати вкладені меню і т.д. Ми можемо навіть відображати його, коли нам завгодно, а не тільки по правому кліку. Для цього у класу NativeMenu є метод:

NativeMenu.display(stage:Stage, stageX:Number, stageY:Number):void

Все було б добре, але є одне але  
Як Ви бачите метод display() приймає першим параметром Stage, але [...]]]></description>
			<content:encoded><![CDATA[<p>Так, в <strong>AIR</strong> є можливість використовувати своє контекстне меню, додавати вкладені меню і т.д. Ми можемо навіть відображати його, коли нам завгодно, а не тільки по правому кліку. Для цього у класу <strong>NativeMenu</strong> є метод:</p>
<ol class="code">
<li>NativeMenu.display(stage:Stage, stageX:Number, stageY:Number):void</li>
</ol>
<p>Все було б добре, але є одне <strong>але</strong> <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Як Ви бачите метод <strong>display()</strong> приймає першим параметром <strong>Stage</strong>, але у <strong>SystemTrayIcon</strong> немає <strong>stage</strong> <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> Тобто, якщо нам потрібно відобразити меню біля трею (за допомогою <strong>display()</strong>), то треба використовувати <strong>Application.application.stage</strong>, але тоді треба бути поміркувати як розташувати меню <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Адже координати <strong>SystemTrayIcon</strong> невідомі&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/04/15/79/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Метагеґ [MIXIN] у Flex</title>
		<link>http://blog.pirrest.com/2008/03/27/77/</link>
		<comments>http://blog.pirrest.com/2008/03/27/77/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 13:19:03 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[Flex Framework 3]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[[MIXIN]]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/03/27/77/</guid>
		<description><![CDATA[Якщо Ви проставите метатеґ [MIXIN] у Вашому класі (трохи вище визначення класу), то при старті Вашого Flex-застосування буде викликана статична функція init():

public static function init(root:DisplayObject):void

Викличе її SystemManager.
У допомозі Flex є згадки про цей метатеґ, знайти їх можна виконавши пошук по слову mixin 
]]></description>
			<content:encoded><![CDATA[<p>Якщо Ви проставите метатеґ <strong>[MIXIN]</strong> у Вашому класі (трохи вище визначення класу), то при старті Вашого Flex-застосування буде викликана статична функція <strong>init()</strong>:</p>
<ol class="code">
<li>public static function init(root:DisplayObject):void</li>
</ol>
<p>Викличе її <strong>SystemManager</strong>.</p>
<p>У допомозі Flex є згадки про цей метатеґ, знайти їх можна виконавши пошук по слову <strong>mixin</strong> <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/03/27/77/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Як за допомогою [embed] вбудувати swf з кодом</title>
		<link>http://blog.pirrest.com/2008/03/21/74/</link>
		<comments>http://blog.pirrest.com/2008/03/21/74/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 13:43:14 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[ActionScript 3.0]]></category>

		<category><![CDATA[Flash IDE]]></category>

		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[application/octet-stream]]></category>

		<category><![CDATA[ByteArrayAsset]]></category>

		<category><![CDATA[mimeType]]></category>

		<category><![CDATA[[Embed]]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/03/21/74/</guid>
		<description><![CDATA[Ми знаємо, що при вбудуванні swf за допомогою теґу [Embed] увесь код, який був у swf-ці, втрачається. Є один спосіб як зберегти код.
Спочатку створимо у Flash IDE флешку, головним класом якої буде, наприклад, assets.Flea. В цьому класі є метод startJumping(), який просто починає програвання флешки. Назвемо файл flea.swf.
Тепер вбудуємо flea.swf в будь-який клас у Flex-проекті:

[Embed(&#8221;assets/flea.swf&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>Ми знаємо, що при вбудуванні swf за допомогою теґу <strong>[Embed]</strong> увесь код, який був у swf-ці, втрачається. Є один спосіб як зберегти код.</p>
<p>Спочатку створимо у <strong>Flash IDE</strong> флешку, головним класом якої буде, наприклад, <strong>assets.Flea</strong>. В цьому класі є метод <strong>startJumping()</strong>, який просто починає програвання флешки. Назвемо файл <strong>flea.swf</strong>.</p>
<p>Тепер вбудуємо <strong>flea.swf</strong> в будь-який клас у Flex-проекті:</p>
<ol class="code">
<li>[Embed(&#8221;assets/flea.swf&#8221;, mimeType=&#8221;application/octet-stream&#8221;)]</li>
<li>private var FleaAsset:Class;</li>
</ol>
<p><strong>mimeType=&#8221;application/octet-stream&#8221;</strong> дає зрозуміти <strong>компілятору Flex</strong>, що вбудування потрібно робити без будь-якої конвертації даних.</p>
<p>Тепер в <strong>FleaAsset </strong>ми маємо клас <strong>ByteArrayAsset</strong>, тобто, практично <strong>ByteArray</strong>.</p>
<p>Далі завантажуємо екземпляр <strong>FleaAsset </strong>до <strong>Loader </strong>за допомогою <strong>loadBytes()</strong>:</p>
<ol class="code">
<li>var currLoader:Loader = new Loader();</li>
<li>var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);</li>
<li>currLoader.loadBytes( new FleaAsset(), ldrContext );</li>
</ol>
<p><strong>ldrContext </strong>ми використовуємо, щоб бути впевненими, що клас, який знаходиться в <strong>FleaAsset </strong>буде тим самим, що і в Flex проекті.</p>
<p>Далі, щоб клас із <strong>FleaAsset </strong>з&#8217;явився для нашого використання, нам потрібно почекати один кадр. Це не дуже добре, але як це обійти я не знаю.</p>
<ol class="code">
<li>var sprite:Sprite = new Sprite();</li>
<li>sprite.addEventListener(Event.ENTER_FRAME, enterFrameHandler);</li>
</ol>
<p>Далі, ми просто створюємо екземпляр класу <strong>assets.Flea</strong> та використовуємо його як забажаємо. Уся графічна частина цього класу, яку ми створили у <strong>Flash IDE</strong>, буде присутня <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol class="code">
<li>import assets.Flea;</li>
<li>function enterFrameHandler(event:Event):void</li>
<li>{
<ol>
<li>var flea:Flea = new Flea();</li>
</ol>
<ol>
<li>addChild(flea);</li>
</ol>
<ol>
<li>flea.startJumping();</li>
<li>sprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);</li>
</ol>
</li>
<li>}</li>
</ol>
<p>Я зробив <a href="http://blog.pirrest.com/wp-content/uploads/2008/03/embeddingswf.zip">приклад</a> такої собі бібліотеки, яка може спростити роботу з убудованими swf.</p>
<p>Щоб знати більше раджу почитати це (англійською):</p>
<ul>
<li><a href="http://livedocs.adobe.com/flex/3/html/embed_3.html" target="_blank">Про теґ [Embed] та про mimeType які підтримує Flex </a></li>
<li><a href="http://livedocs.adobe.com/flex/3/html/18_Client_System_Environment_5.html" target="_blank">Про ApplicationDomain і навіщо він потрібен</a></li>
<li><a href="http://livedocs.adobe.com/flex/3/langref/mx/core/IFlexAsset.html" target="_blank">Трішки про класи *Asset</a></li>
<li><a href="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;postid=8046&amp;loc=en_US&amp;productid=2" target="_blank">Приклад вбудування XML</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/03/21/74/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SWF metatag</title>
		<link>http://blog.pirrest.com/2008/03/20/73/</link>
		<comments>http://blog.pirrest.com/2008/03/20/73/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 07:54:11 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[Flex Builder 2]]></category>

		<category><![CDATA[Flex Builder 3]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[metatag]]></category>

		<category><![CDATA[SWF]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/03/20/73/</guid>
		<description><![CDATA[В ActionScript проекті (мається на увазі проект в Flex Builder) параметри swf файлу Ви можете встановити за допомогою метатеґу SWF:
[SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
Помістіть його перед головним класом.
]]></description>
			<content:encoded><![CDATA[<p>В <strong>ActionScript</strong> проекті (мається на увазі проект в <strong>Flex Builder</strong>) параметри <strong>swf</strong> файлу Ви можете встановити за допомогою метатеґу <strong>SWF</strong>:</p>
<p align="left"><code>[SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]</code></p>
<p>Помістіть його перед головним класом.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/03/20/73/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DisplayObjectContainer.removeAllChildren()</title>
		<link>http://blog.pirrest.com/2008/03/19/71/</link>
		<comments>http://blog.pirrest.com/2008/03/19/71/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 19:15:40 +0000</pubDate>
		<dc:creator>pirrest</dc:creator>
		
		<category><![CDATA[ActionScript 3.0]]></category>

		<category><![CDATA[Корисні блохи]]></category>

		<category><![CDATA[DisplayObjectContainer.removeAllChildren()]]></category>

		<guid isPermaLink="false">http://blog.pirrest.com/2008/03/19/71/</guid>
		<description><![CDATA[Я практично впевнений, що Ви хоч раз шукали метод removeAllChildren() у DisplayObjectContainer  
Ось, на мою думку, найелегантніша реалізація (підказали Адобовці):

public function removeAllChildren():void
{

while (numChildren &#62; 0)

removeChildAt(0);




}

]]></description>
			<content:encoded><![CDATA[<p>Я практично впевнений, що Ви хоч раз шукали метод <strong>removeAllChildren()</strong> у <strong>DisplayObjectContainer</strong> <img src='http://blog.pirrest.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ось, на мою думку, найелегантніша реалізація (підказали Адобовці):</p>
<ol class="code">
<li>public function removeAllChildren():void</li>
<li>{
<ol>
<li>while (numChildren &gt; 0)
<ol>
<li>removeChildAt(0);</li>
</ol>
</li>
</ol>
</li>
<li>}</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirrest.com/2008/03/19/71/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
