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

<channel>
	<title>Пастила. &#187; Flash, Actionscript 3</title>
	<atom:link href="http://pastila.org/category/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://pastila.org</link>
	<description>Блог flash-разработчика</description>
	<lastBuildDate>Fri, 11 May 2012 18:17:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Двоичный (бинарный) поиск C#-like</title>
		<link>http://pastila.org/flash/binary-search/</link>
		<comments>http://pastila.org/flash/binary-search/#comments</comments>
		<pubDate>Fri, 11 May 2012 18:17:21 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=325</guid>
		<description><![CDATA[В работе над проектом одной из игр, мне пришлось работать с алгоритмами упаковки прямоугольников (задача о ранце) для составления атласа спрайта графики. В одном из алгоритмов (реализация которого была написана на C#) использовался двоичный поиск. Стандартными средствами AS3 было не обойтись, к тому же бинарный поиск в C# в случае отсутствия искомого элемента возвращает отрицательное [...]]]></description>
			<content:encoded><![CDATA[<p>В работе над проектом одной из игр, мне пришлось работать с алгоритмами упаковки прямоугольников (задача о ранце) для составления атласа спрайта графики.</p>
<p>В одном из алгоритмов (реализация которого была написана на C#) использовался двоичный поиск. Стандартными средствами AS3 было не обойтись, к тому же бинарный поиск в C# в случае отсутствия искомого элемента возвращает отрицательное число, являющееся побитовым дополнением индекса наиболее близкого к искомому элементу (наиболее близкое всегда больше искомого), а если и такой элемент не найден, то возвращается отрицательное число, являющееся побитовым дополнением длины массива.</p>
<blockquote><p>Двоичный (бинарный) поиск (также известен как метод деления пополам и дихотомия) — классический алгоритм поиска элемента в отсортированном массиве (векторе), использующий дробление массива на половины. Используется в информатике, вычислительной математике и математическом программировании.</p></blockquote>
<p><em>Источник:</em> <a href="http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA" title="Wikipedia: Двоичный (бинарный) поиск" target="_blank">Двоичный (бинарный) поиск</a><br />
<span id="more-325"></span></p>
<p>В связи с чем я и написал соответствующую реализацию. Хочется обратить внимание на то, что бинарный поиск годится исключительно для сортированных массивов, она значительно быстрее и гибче обычного indexOf, вы можете писать собственные классы имплементирующие интерфейс сравнения <a href="https://bitbucket.org/mayakwd/pastila-core/src/43c8f981eb84/src/org/pastila/utils/comparer/IComparer.as" title="IComparer интерфейс класса сравнения" target="_blank">IComparer</a>, для поиска в массивах с любыми данными, и любыми условиями сравнения.</p>
<p><a href="http://bitbucket.org/mayakwd/pastila-core/src/43c8f981eb84/src/org/pastila/utils/search/binarySearch.as" title="Реализация двоичного (бинарного) поиска на AS3" target="_blank">Исходный код на bitbucket.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/binary-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Фильтрация XML (E4X) при помощи регулярных выражений и сложных условий</title>
		<link>http://pastila.org/flash/xml-regexp-filtering/</link>
		<comments>http://pastila.org/flash/xml-regexp-filtering/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 16:23:04 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[Записки]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=314</guid>
		<description><![CDATA[Заметка в качестве продолжения темы о получении данных из XML. Для фильтрации XML можно так же использовать регулярные выражения (RegExp) и собственные условия через функции фильтрации (помимо простых сравнений). Не уверен, что данный синтаксис скушает любая среда разработки (по крайней мере FDT выдает ошибку, хотя синтаксис правильный). Простой пример. У нас имеется список персонала одного [...]]]></description>
			<content:encoded><![CDATA[<p>Заметка в качестве продолжения темы о получении данных из XML.</p>
<p>Для фильтрации XML можно так же использовать регулярные выражения (RegExp) и собственные условия через функции фильтрации (помимо простых сравнений).<br />
Не уверен, что данный синтаксис скушает любая среда разработки (по крайней мере FDT выдает ошибку, хотя синтаксис правильный).</p>
<p>Простой пример. У нас имеется список персонала одного из отделов компании, и нам необходимо узнать, кто из них родился в апреле.<br />
<span id="more-314"></span><br />
Пример с использованием регулярного выражения:</p>
<p></p><pre class="crayon-plain-tag">package {
	import flash.display.Sprite;

	public class RegexpTest extends Sprite {
		public function RegexpTest() {
			var aprilBirthdayRegExp : RegExp = /^\d{2}\.04\.\d{4}/;
			var xml : XML = &lt;persons&gt;
				&lt;items&gt;
					&lt;item name=&quot;Peter Griffin&quot; birthdate=&quot;20.12.1998&quot;/&gt;
					&lt;item name=&quot;Robert Sheckley&quot; birthdate=&quot;16.07.1928&quot;/&gt;
					&lt;item name=&quot;William Shakespeare&quot; birthdate=&quot;23.04.1616&quot;/&gt;
					&lt;item name=&quot;Maria de' Medici&quot; birthdate=&quot;26.04.1575&quot;/&gt;
					&lt;item name=&quot;Homer Simpson&quot; birthdate=&quot;19.04.1987&quot;/&gt;
					&lt;item name=&quot;Mikhail Bulgakov&quot; birthdate=&quot;15.05.1891&quot;/&gt;
				&lt;/items&gt;
			&lt;/persons&gt;;

			trace(xml.items.item.(aprilBirthdayRegExp.test(@birthdate)));
		}
	}
}</pre><p></p>
<p>Результат:</p><pre class="crayon-plain-tag">&lt;item name=&quot;Homer Simpson&quot; birthdate=&quot;19.04.1987&quot;/&gt;
&lt;item name=&quot;William Shakespeare&quot; birthdate=&quot;23.04.1616&quot;/&gt;
&lt;item name=&quot;Maria de' Medici&quot; birthdate=&quot;26.04.1575&quot;/&gt;</pre><p></p>
<p>Из примера становится вполне ясно, что для фильтрации можно использовать и свою собственную функцию, результатом выполнения которой будет Boolean-значение (true либо false).</p>
<p>Попробуем отфильтровать людей из списка, которые родились до 1900 года.</p><pre class="crayon-plain-tag">package {
	import flash.display.Sprite;

	public class RegexpTest extends Sprite {
		public function RegexpTest() {
			var xml : XML = &lt;persons&gt;
				&lt;items&gt;
					&lt;item name=&quot;Peter Griffin&quot; birthdate=&quot;20.12.1998&quot;/&gt;
					&lt;item name=&quot;Homer Simpson&quot; birthdate=&quot;19.04.1987&quot;/&gt;
					&lt;item name=&quot;Robert Sheckley&quot; birthdate=&quot;16.07.1928&quot;/&gt;
					&lt;item name=&quot;William Shakespeare&quot; birthdate=&quot;23.04.1616&quot;/&gt;
					&lt;item name=&quot;Maria de' Medici&quot; birthdate=&quot;26.04.1575&quot;/&gt;
					&lt;item name=&quot;Mikhail Bulgakov&quot; birthdate=&quot;15.05.1891&quot;/&gt;
				&lt;/items&gt;
			&lt;/persons&gt;;

			trace(xml.items.item.(dateFilter(@birthdate)));
		}
		
		private function dateFilter (date : String) : Boolean {
			var dateParts : Array = date.split(&quot;.&quot;);
			var year : uint = parseInt(dateParts[2]);
			return year &lt; 1900;
		}
	}
}</pre><p></p>
<p>Результат:</p><pre class="crayon-plain-tag">&lt;item name=&quot;William Shakespeare&quot; birthdate=&quot;23.04.1616&quot;/&gt;
&lt;item name=&quot;Maria de' Medici&quot; birthdate=&quot;26.04.1575&quot;/&gt;
&lt;item name=&quot;Mikhail Bulgakov&quot; birthdate=&quot;15.05.1891&quot;/&gt;</pre><p></p>
<p>Фильтровать можно естественно не только атрибуты но и ноды.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/xml-regexp-filtering/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Вопрос: приложения для Facebook</title>
		<link>http://pastila.org/flash/vopros-prilozheniya-facebook/</link>
		<comments>http://pastila.org/flash/vopros-prilozheniya-facebook/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 21:23:36 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[Записки]]></category>
		<category><![CDATA[Социальное]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[graph]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=281</guid>
		<description><![CDATA[Назрела статья о работе с фейсбуком, так как материала на русском достаточно мало, понятного и того меньше. Статья будет описывать всё от создания приложения в девелоперском разделе, до подключения с помощью PHP и работы с GraphAPI посредством AS3. Ну и суть вопроса: кому-нибудь эта статья вообще нужна?]]></description>
			<content:encoded><![CDATA[<p>Назрела статья о работе с фейсбуком, так как материала на русском достаточно мало, понятного и того меньше.<br />
Статья будет описывать всё от создания приложения в девелоперском разделе, до подключения с помощью PHP и работы с GraphAPI посредством AS3.</p>
<p>Ну и суть вопроса: кому-нибудь эта статья вообще нужна?</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/vopros-prilozheniya-facebook/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Релиз CASALib 1.4.0</title>
		<link>http://pastila.org/flash/zapiski/reliz-casalib/</link>
		<comments>http://pastila.org/flash/zapiski/reliz-casalib/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 19:26:29 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Записки]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[casalib]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[lib]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=267</guid>
		<description><![CDATA[Запись для «слоупоков» вроде меня. 17 июня вышел «свежий» релиз замечательной библиотеки под названием CASALib, что содержит достаточное количество, необходимых для работы разработчиков, классов, которые существенно облегчают разработку. Из основных особенностей хочу выделить: Класс ListenerManager, что позволяет быстро и просто добавить к любому классу наследуемому от EventDispatcher возможности удаления всех слушателей, удаления слушателей для определенно [...]]]></description>
			<content:encoded><![CDATA[<p><em>Запись для «слоупоков» вроде меня.</em><br />
17 июня вышел «свежий» релиз замечательной библиотеки под названием CASALib, что содержит достаточное количество, необходимых для работы разработчиков, классов, которые существенно облегчают разработку.</p>
<p>Из основных особенностей хочу выделить: </p>
<ol>
<li>Класс <a href="http://as3.casalib.org/releases/1.4.0/docs/org_casalib_events_ListenerManager.html" title="ListenerManager" target="_blank">ListenerManager</a>, что позволяет быстро и просто добавить к любому классу наследуемому от EventDispatcher возможности удаления всех слушателей, удаления слушателей для определенно типа события, и т.д. </li>
<li>Удобные классы загрузки любых данных</li>
<li>Готовые шаблоны для создания классов с деструкторами</li>
<li>Классы дисплей-объектов (CasaSprite, CasaMovieClip), в функционал которых вложены функции удаления всех детей, из уничтожения (+ чудесная плюшка &#8211; рекурсивное удаление и деструкция)</li>
</ol>
<p>В целом крайне полезная библиотека, на её основе собственно базируется всё, что я пишу.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/zapiski/reliz-casalib/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Получение данных из XML (E4X)</title>
		<link>http://pastila.org/flash/xml-e4x/</link>
		<comments>http://pastila.org/flash/xml-e4x/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 00:24:43 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[e4x]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=254</guid>
		<description><![CDATA[Как показывает практика, далеко не все знают об использовании оператора «..» и фильтрации при работе с XML. Для этого существуют очень удобные средства E4X (ECMAScript for XML) Оператор «..» Данный оператор позволяет получать данные потомков дерева XML вне зависимости от глубины их нахождения. На примере: У нас есть категоризованный список продуктов: [crayon-4fb97d04921c8/] Нам необходимо получить [...]]]></description>
			<content:encoded><![CDATA[<p>Как показывает практика, далеко не все знают об использовании оператора «..» и фильтрации при работе с XML. Для этого существуют очень удобные средства <a href="http://ru.wikipedia.org/wiki/ECMAScript_for_XML" title="ECMAScript для XML" target="_blank">E4X </a>(ECMAScript for XML)</p>
<h3>Оператор «..»</h3>
<p>Данный оператор позволяет получать данные потомков дерева XML вне зависимости от глубины их нахождения.</p>
<p>На примере:<br />
У нас есть категоризованный список продуктов:</p><pre class="crayon-plain-tag">&lt;food&gt;
 &lt;vegetables&gt;
   &lt;item caloric=&quot;2&quot; isDietic=&quot;true&quot;&gt;tomato&lt;/item&gt;
   &lt;item caloric=&quot;40&quot; isDietic=&quot;false&quot;&gt;potato&lt;/item&gt;
 &lt;/vegetables&gt;
 &lt;fruits&gt;
   &lt;item caloric=&quot;4&quot; isDietic=&quot;true&quot;&gt;orange&lt;/item&gt;
   &lt;item caloric=&quot;26&quot; isDietic=&quot;false&quot;&gt;apple&lt;/item&gt;
 &lt;/fruits&gt;
&lt;/food&gt;</pre><p></p>
<p>Нам необходимо получить полностью все продукты вне зависимости от их категории:</p><pre class="crayon-plain-tag">var foodItems : XMLList = xml..item;
for each (var item : XML in foodItems) {
  trace(item.toString());
}</pre><p></p>
<p>На выходе получим:</p><pre class="crayon-plain-tag">tomato
potato
orange
apple</pre><p></p>
<p><span id="more-254"></span>В сочетании с @ можно получить так же атрибуты:</p><pre class="crayon-plain-tag">var foodItems : XMLList = xml..item.@caloric;</pre><p></p>
<p>Такая запись выдаст абсолютно все атрибуты caloric, вне зависимости от того в каком элементе дерева они находятся</p><pre class="crayon-plain-tag">var foodItems : XMLList = xml..@caloric;</pre><p></p>
<p>Ну и для полной ясности.<br />
Данная запись выдаст только фрукты:</p><pre class="crayon-plain-tag">var foodItems : XMLList = xml.fruits..item;</pre><p></p>
<p>В случае если осталось недопонимание, вы всегда можете ознакомиться с <a href="http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/operators.html#descendant_accessor" title="Оператор доступа к потомкам" target="_blank">официальной документацией</a>.</p>
<h3>Фильтрация данных XML.</h3>
<p>Фильтрация позволяет получить только те данные которые необходимы, а не все подряд. Осуществляется она при помощи указания данных в скобках.</p>
<p>Имеется список фильмов, которые мы можем купить в разных интернет магазинах:</p>
<p></p><pre class="crayon-plain-tag">&lt;films&gt;
  &lt;item price=&quot;99.9&quot;&gt;
    &lt;name&gt;Batman and Robbin vs Darkwing Duck&lt;/name&gt;
    &lt;shop&gt;ozon.ru&lt;/shop&gt;
  &lt;/item&gt;
  &lt;item price=&quot;110.99&quot;&gt;
    &lt;name&gt;Желтый чемоданчик&lt;/name&gt;
    &lt;shop&gt;ozon.ru&lt;/shop&gt;
  &lt;/item&gt;
  &lt;item price=&quot;150&quot;&gt;
    &lt;name&gt;Валентайн Понтифик. Экранизация.&lt;/name&gt;
    &lt;shop&gt;amazon.com&lt;/shop&gt;
  &lt;/item&gt;
&lt;/films&gt;</pre><p></p>
<p>Нам необходимо получить фильмы которые продаются только в магазине ozon.ru.</p><pre class="crayon-plain-tag">var items : XMLList = xml..item.(shop == &quot;ozon.ru&quot;);
for each (var item : XML in items) {
  trace(item.toString());
}</pre><p></p>
<p>На выходе получим:</p><pre class="crayon-plain-tag">&lt;item price=&quot;99.9&quot;&gt;
  &lt;name&gt;Batman &amp;amp; Robbin vs Darkwing Duck&lt;/name&gt;
  &lt;shop&gt;ozon.ru&lt;/shop&gt;
&lt;/item&gt;
&lt;item price=&quot;110.99&quot;&gt;
  &lt;name&gt;Желтый чемоданчик&lt;/name&gt;
  &lt;shop&gt;ozon.ru&lt;/shop&gt;
&lt;/item&gt;</pre><p></p>
<p>Фильмы, которые стоят меньше ста рублей:</p><pre class="crayon-plain-tag">var items : XMLList = xml..item.(@price &lt; 100);</pre><p></p>
<p>Фильмы, которые стоят больше ста рублей и продаются только в amazon.com:</p><pre class="crayon-plain-tag">var items : XMLList = xml..item.(@price &gt; 100 &amp;&amp; shop == &quot;amazon.com&quot;);</pre><p></p>
<p>В случае если осталось недопонимание, вы всегда можете ознакомиться с <a href="http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/operators.html#parentheses_(XML)" target="_blank">официальной документацией</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/xml-e4x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сброс letterSpacing при изменении текста</title>
		<link>http://pastila.org/flash/sbros-letterspacing-izmenenii/</link>
		<comments>http://pastila.org/flash/sbros-letterspacing-izmenenii/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 14:18:48 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=233</guid>
		<description><![CDATA[Столкнулся с багом когда при изменении текста у текстового поля, сбрасывается установленный letterSpacing. Лечение: [crayon-4fb97d049642f/] Не особо красивое решение, но и баг не красавец.]]></description>
			<content:encoded><![CDATA[<p>Столкнулся с багом когда при изменении текста у текстового поля, сбрасывается установленный letterSpacing.<br />
Лечение:</p>
<p></p><pre class="crayon-plain-tag">var textFormat : TextFormat = textField.getTextFormat();
textField.text = &quot;New text&quot;;
textField.setTextFormat(textFormat);</pre><p></p>
<p>Не особо красивое решение, но и баг не красавец.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/sbros-letterspacing-izmenenii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Быстрое внедрение шрифтов [Embed]</title>
		<link>http://pastila.org/flash/bystroe-vnedrenie-shriftov-embed/</link>
		<comments>http://pastila.org/flash/bystroe-vnedrenie-shriftov-embed/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 09:28:20 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[внедрение]]></category>
		<category><![CDATA[встраивание]]></category>
		<category><![CDATA[шрифты]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=226</guid>
		<description><![CDATA[Уже ни раз писалось о встраивании шрифтов, поэтому я не буду описывать весь процесс а покажу лишь простой и удобный прием на примере кода. [crayon-4fb97d0496c00/] Собственно встроить шрифтов можно сколько угодно, в коде ничего менять не придется кроме добавления строк описывающих само встраивание. Чтобы шрифты отображались в самом приложении достаточно будет в конструкторе создать новый [...]]]></description>
			<content:encoded><![CDATA[<p>Уже ни раз писалось о встраивании шрифтов, поэтому я не буду описывать весь процесс а покажу лишь простой и удобный прием на примере кода.</p>
<p></p><pre class="crayon-plain-tag">package assets {
	import flash.display.Sprite;
	import flash.system.Security;
	import flash.text.Font;
	import flash.utils.describeType;

	public class FontsAsset extends Sprite {
		[Embed(source=&quot;../../../res/fonts/MyriadPro-Semibold.otf&quot;, mimeType=&quot;application/x-font-truetype&quot;, fontName=&quot;MyriadSemibold&quot;, unicodeRange=&quot;U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+02C6,U+02DC,U+2013-U+2014,U+2018-U+201A,U+201C-U+201E,U+2020-U+2022,U+2026,U+2030,U+2039-U+203A,U+20AC,U+2122,U+0401,U+0410-U+044F&quot;, embedAsCFF=&quot;false&quot;)]
		// Uppercase [A..Z] ; Lowercase [a..z] ; Numerals [0..9] ; Punctuation [!@#%...] ; Basic Latin ; chars=&quot;АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя&quot;
		public static var MyriadSemibold : Class;

		[Embed(source=&quot;../../../res/fonts/MyriadPro-Regular.otf&quot;, mimeType=&quot;application/x-font-truetype&quot;, fontName=&quot;MyriadRegular&quot;, unicodeRange=&quot;U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+02C6,U+02DC,U+2013-U+2014,U+2018-U+201A,U+201C-U+201E,U+2020-U+2022,U+2026,U+2030,U+2039-U+203A,U+20AC,U+2122,U+0401,U+0410-U+044F&quot;, embedAsCFF=&quot;false&quot;)]
		// Uppercase [A..Z] ; Lowercase [a..z] ; Numerals [0..9] ; Punctuation [!@#%...] ; Basic Latin ; chars=&quot;АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя&quot;
		public static var MyriadRegular : Class;

		public function FontsAsset() {
			Security.allowDomain(&quot;*&quot;);
			var xml : XML = describeType(this);
			for (var i : uint = 0; i &lt; XMLList(xml[&quot;variable&quot;]).length(); i++) {
				Font.registerFont(this[XMLList(xml[&quot;variable&quot;])[i].@name]);
			}
		}
	}
}</pre><p></p>
<p>Собственно встроить шрифтов можно сколько угодно, в коде ничего менять не придется кроме добавления строк описывающих само встраивание.<br />
Чтобы шрифты отображались в самом приложении достаточно будет в конструкторе создать новый экземпляр FontsAsset.</p>
<p></p><pre class="crayon-plain-tag">new FontsAsset();</pre><p></p>
<blockquote><p>
Конечно не стоит забывать о использовании textField.embedFonts.
</p></blockquote>
<p>Так же вы можете скомпилировать этот asset как отдельный swf и свободно подгружать его при необходимости.</p>
<p><em>Метод позаимствован (а потом модифицирован) у Font Library Creator&#8217;a среды разработки <a href="http://www.fdt.powerflasher.com/">Powerflasher FDT</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/bystroe-vnedrenie-shriftov-embed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Утечки памяти и их устранение</title>
		<link>http://pastila.org/flash/udalenie-obektov-utechki-pamyati-vo-flash/</link>
		<comments>http://pastila.org/flash/udalenie-obektov-utechki-pamyati-vo-flash/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 21:39:05 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[leaks]]></category>
		<category><![CDATA[leaks as3]]></category>
		<category><![CDATA[memory leaks]]></category>
		<category><![CDATA[profiler]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[память]]></category>
		<category><![CDATA[утечки]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=104</guid>
		<description><![CDATA[Удаление объектов. Утечки памяти во Flash.]]></description>
			<content:encoded><![CDATA[<p><strong>Запись была переработана и обновлена.</strong></p>
<h2>1. Введение</h2>
<p>Многие начинающие флэшеры, как и я в свое время, не имеют представления об освобождении памяти от использованных, либо недооценивают данный раздел программирования.<br />
В ходе разработки приложений объекты, которые были использованы и более не являются необходимыми в большинстве случаев остаются в памяти, если не позаботиться об их уничтожении. Оставаясь в памяти «мусор» может вызвать проблемы с производительностью, что для конечного пользователя не окажется радостным событием.<br />
В данной статье раскрываются методы очистки памяти от «мусора».</p>
<p><span id="more-104"></span></p>
<h2>2. Откуда берется мусор, и как образуются утечки памяти (memory leaks)?</h2>
<p>Во as3 вы никогда не работаете напрямую с объектом (классы, массивы и т.д.), каждый раз вы обращаетесь по ссылке к данному классу.</p><pre class="crayon-plain-tag">var instanceLink : Sprite = new Sprite();</pre><p>В данном примере мы создаем новый экземпляр класса Sprite, и instanceLink есть ничто иное как ссылка указывающая на данный экземпляр класса.</p>
<h3>2.1 Мертвые объекты</h3>
<p>AS3 не предоставляет «нативного» (native) метода для уничтожения текущего экземпляра класса, то есть деструктора. Вместо тотального контроля памяти программистом, как это реализовано например в C++, используется механизм под названием <em>сборщик мусора</em> (Garbage Collector), который очищает память от &#8220;мертвых объектов&#8221; при каждой итерации. Мертвым объектом считается, тот на который не существует ни одной ссылки.</p>
<p>Таким образом, если мы напишем:</p><pre class="crayon-plain-tag">var instanceLink : Sprite = new Sprite();
var doubleLink : Sprite = instanceLink;

instanceLink = null;</pre><p>&#8230;то экземпляр класса Sprite не будет удален из памяти, потому что doubleLink все еще указывает на него.</p>
<h3>2.2 Список отображения</h3>
<p></p><pre class="crayon-plain-tag">secondSprite.addChild(instanceLink);
instanceLink = null;</pre><p>В список отображения (display list) secondSprite заносится экземпляр спрайта, даже после очищения ссылки на экземпляр, он никуда не денется и из памяти удален не будет, так как ссылка на него находится в display list&#8217;e, следовательно чтобы удалить объект из памяти необходимо убрать его из списка отображения secondSprite.</p>
<blockquote><p>Стоит заметить, что в в случае если secondSprite будет удален со сцены и ссылки на него будут уничтожены, то сборщик мусора рано или поздно соберет и его и instanceLink, даже если instanceLink будет находиться в списке отображения secondSprite. Это произойдет потому, что secondSprite и instanceLink по сути являются мертвыми объектами так как ссылка на instanceLink содержится только в мертвом объекте, а следовательно она недействительна.</p>
<p><em>Но стоит избегать этой логики при программировании, так как garbage collector&#8217;у понадобится больше одной итерации для того, чтобы определить, что instanceLink готов к уничтожению, следовательно на операцию очистки потратится больше ресурсов и процессорного времени.</em></p></blockquote>
<h3>2.3 Слушатели событий</h3>
<p>Все та же проблема ожидает вас при подписке на прослушивание событий объектов (addEventListener). Если вы подписались на событие и не удалите слушателя перед очисткой ссылок на объект, то после очистки объект оных объект так и останется в памяти и будет функционировать, так как имеется ссылка на него в виде подписки.</p>
<p>Избежать этого можно двумя путями:</p>
<ol>
<li>Использовать weakReference (мягкую ссылку) при подписке<br />
<pre class="crayon-plain-tag">object.addEventListener(type, listener, false, 0, true);</pre><br />
Мягкая ссылка означает, что в случае если сборщик мусора решит проверить можно ли удалить object, то данная подписка на событие не воспрепятствует его удалению.</li>
<li>Самостоятельно удалив слушателя:<br />
<pre class="crayon-plain-tag">object.removeEventListener(type,listener);</pre>
</li>
</ol>
<blockquote><p><em>Стоит избегать использования мягких ссылок там, где это не является поистине необходимым, так как сборщик мусора может уничтожить объект до того, как он выполнит свои обязанности.</em></p></blockquote>
<blockquote><p>Необходимо отметить что для экранных объектов не обязательно удалять прослушивание событий от мышки, при удалении ссылок, так как garbage collector самостоятельно &#8220;обрежет&#8221; эту связь, но опять же это отнимет больше ресурсов, нежели при ручной отписке от событий.</p></blockquote>
<h3>2.4 Мягкие ссылки</h3>
<p>Помимо мягких ссылок в подписке на события, можно использовать их и в Dictionary, для этого при создании экземпляра Dictionary параметр weakKeys равным true.</p><pre class="crayon-plain-tag">var dict : Dictionary = new Dictionary(true);</pre><p>Это означает, что ключи (!) dictionary будут использоваться в качестве мягких ссылок, а не жестких. То есть:</p><pre class="crayon-plain-tag">dict[instanceLink] = true;</pre><p>Не заставит сборщик мусора отказаться от идеи удалить объект instanceLink из памяти, если других ссылок на него более не существует.</p>
<h2>3. Итог</h2>
<p>После использования объектов, для того чтобы они были удалены из памяти необходимо: </p>
<ol>
<li>Удалить всех слушателей объекта</li>
<li>В случае если это экранный объект, удалить его из списка отображения</li>
<li>Уничтожить все ссылки на него</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/udalenie-obektov-utechki-pamyati-vo-flash/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Официальное руководство по оптимизации приложений</title>
		<link>http://pastila.org/flash/oficialnoe-rukovodstvo-po-optimizacii-prilozhenij/</link>
		<comments>http://pastila.org/flash/oficialnoe-rukovodstvo-po-optimizacii-prilozhenij/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 16:54:30 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[bitmapdata]]></category>
		<category><![CDATA[документация]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[память]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=184</guid>
		<description><![CDATA[Adobe любезно предоставили русскоязычное руководство по оптимизации приложений, в котором описано большое количество приемов оптимизации, включая новейшие фичи плеера. Полезно будет почитать не только новичку, но и профессионалу.]]></description>
			<content:encoded><![CDATA[<p>Adobe любезно предоставили <a href="http://help.adobe.com/ru_RU/as3/mobile/flashplatform_optimizing_content.pdf">русскоязычное руководство по оптимизации приложений</a>, в котором описано большое количество приемов оптимизации, включая новейшие фичи плеера.</p>
<p>Полезно будет почитать не только новичку, но и профессионалу.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/oficialnoe-rukovodstvo-po-optimizacii-prilozhenij/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pixel Bender 3D</title>
		<link>http://pastila.org/flash/pixel-bender-3d/</link>
		<comments>http://pastila.org/flash/pixel-bender-3d/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 04:10:07 +0000</pubDate>
		<dc:creator>Илья Маланьин</dc:creator>
				<category><![CDATA[Flash, Actionscript 3]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://pastila.org/?p=152</guid>
		<description><![CDATA[Сегодня Kevin Goldsmith (глава команды разрабатывающей: Pixel Bender, технологии обработки изображений и работы с GPU для продуктов Adobe)  в <a href="http://blogs.adobe.com/kevin-goldsmith/">своем блоге</a> опубликовал запись о том, что они готовят новый продукт «Pixel Bender 3D» для нового 3D API «Molehill» флэш-плеера.]]></description>
			<content:encoded><![CDATA[<p>Сегодня Kevin Goldsmith (глава команды разрабатывающей: Pixel Bender, технологии обработки изображений и работы с GPU для продуктов Adobe)  в <a href="http://blogs.adobe.com/kevin-goldsmith/">своем блоге</a> опубликовал запись о том, что они готовят новый продукт «Pixel Bender 3D» для нового 3D API «Molehill» флэш-плеера.<br />
<span id="more-152"></span><br />
«Новая версия Pixel Bender включает Actionscript API, который позволит вам комбинировать материалы Pixel Bender  и вершинные ядра (kernel) прямо во время работы, а также содержит много приемов для оптимизации, и вспомогательных API, упрощающих использование шейдерного API «Molehill».</p>
<p>Вообще, я чувствую что новая версия выйдет крайне славной, и технология Flash переродится, и облагородится. Большое количество предпосылок в последнее время заставляет так думать.<br />
Тут вам и Flex Hero SDK, и Molehill и Pixel Bender для 3D и т.д. и т.п., я крайне надеюсь, что то огромное количество багов, что было во flash player&#8217;e начиная 9ой версии и которые так и не пофиксили, не перенесут в <del datetime="2010-10-27T07:40:04+00:00">одиннадцатую</del> новую версию плеера и продукт выйдет высококлассным.</p>
]]></content:encoded>
			<wfw:commentRss>http://pastila.org/flash/pixel-bender-3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

