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

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

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

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

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

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

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

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_sliders_2120715409"
			class="flashmovie"
			width="450"
			height="620">
	<param name="movie" value="/flash/sliders.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="/flash/sliders.swf"
			name="fm_sliders_2120715409"
			width="450"
			height="620">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<img src="http://murejib.com/?ak_action=api_record_view&id=41&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2008/04/24/scrollrect-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>expRandom.</title>
		<link>http://murejib.com/2007/12/12/exprandom/</link>
		<comments>http://murejib.com/2007/12/12/exprandom/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 16:04:15 +0000</pubDate>
		<dc:creator>murejib</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[fx]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://murejib.com/?p=25</guid>
		<description><![CDATA[Иногда бывает нужно, чтобы случайное число с большей вероятностью выпадало ближе к минимальным, или максимальным значениям. Простой пример &#8211; Слот машина. Бонусные символы должны выпадать гораздо реже обычных символов. Существует масса способов реализовать такой рандом, о них, к примеру была речь на форуме flash-mx Вот и мне тут понадобилась такая функция. Некогда мною было написано [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда бывает нужно, чтобы случайное число с большей вероятностью выпадало ближе к минимальным, или максимальным значениям.</p>
<p><span id="more-23"></span></p>
<p>Простой пример &#8211; Слот машина.<br />
Бонусные символы должны выпадать гораздо реже обычных  символов.<br />
Существует масса способов реализовать такой рандом, о них, к примеру была речь на форуме <a href="http://flash-mx.ru/forum/topic_show.pl?tid=223">flash-mx</a></p>
<p>Вот и мне тут понадобилась такая функция.</p>
<p>Некогда мною  было написано некоторое количество игр для казино, все они быи завязаны на сервер, который нынче мертв.  Жалко мне стало игрушек &#8211; красивые были, вот я сейчас и пишу аля-эмулятор сервера со всей логикой игры. Как раз тут вопрос и возник.<br />
Более того мне необходимо, что бы числа возвращались в жестко заданном диапазоне.<br />
Немного мозгового скрипа дало мне вот такую функцию.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> expoRandom<span style="color: #66cc66;">&#40;</span>range:<span style="color: #0066CC;">Number</span>,w:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>
<span style="color: #66cc66;">&#123;</span>
   w = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">max</span><span style="color: #66cc66;">&#40;</span>w,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
   w = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">min</span><span style="color: #66cc66;">&#40;</span>w,<span style="color: #cc66cc;">709</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #b1b100;">return</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">log</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>+<span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">exp</span><span style="color: #66cc66;">&#40;</span>w<span style="color: #66cc66;">&#41;</span>-<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#40;</span>range<span style="color: #66cc66;">/</span>w<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>В функцию передается два параметра &#8211; собственно диапазон, и, не знаю как это правильно обозвать, степень разброса. От это степени зависит насколько сильно выпадающие значения будут тесниться к максимальному краю. Чем больше степень, тем ближе к краю.</p>
<p>В функцию вставлена небольшая проверка &#8211; чтобы ширина не была меньше 1 (в этом случае мы получим обычный рандом) и не была больше 709 (в этом случае выражение Math.exp(w) даст нам infinity). Их собсвенно можно убрать, дабы не забивать процессор лишней работой.</p>
<p>Вся магия тут завязана на простой принцип &#8211; есть график логарифма. Мы берем случайное число по оси X и находим его логарифм по оси Y. Немного корректируем под наш диапазон &#8211; и результат на лице.</p>
<p>Вот к примеру такой:<br />
<a href="http://bbexp.ru/blog/_stuff/random.html"> http://bbexp.ru/blog/_stuff/random.html</a></p>
<img src="http://murejib.com/?ak_action=api_record_view&id=23&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://murejib.com/2007/12/12/exprandom/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

