<?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 игр</title>
	<atom:link href="http://romanuk.net/category/flash/flash-games-creation/feed/" rel="self" type="application/rss+xml" />
	<link>http://romanuk.net</link>
	<description>Рецепты создания игр на флэш</description>
	<lastBuildDate>Fri, 05 Mar 2010 14:32:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Правила оформления бага</title>
		<link>http://romanuk.net/2009/04/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%be%d1%84%d0%be%d1%80%d0%bc%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b1%d0%b0%d0%b3%d0%b0/</link>
		<comments>http://romanuk.net/2009/04/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%be%d1%84%d0%be%d1%80%d0%bc%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b1%d0%b0%d0%b3%d0%b0/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 05:41:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=379</guid>
		<description><![CDATA[Баг необходимо оформлять следующем образом:

Краткое описание (название, одним предложением)
Шаги, которые приводят к багу (здесь может быть один и более шаг, нумеруйте их пожалуйста)
Что происходит (то, что проиходит по выполнении последнего шага)
Что по Вашему мнению должно пройзойти (то, что должно было произойти по выполнению последнего шага)

Если необходимо, сопровождайте баг изображениями.
]]></description>
			<content:encoded><![CDATA[<p>Баг необходимо оформлять следующем образом:</p>
<ol>
<li>Краткое описание (название, одним предложением)</li>
<li>Шаги, которые приводят к багу (здесь может быть один и более шаг, нумеруйте их пожалуйста)</li>
<li>Что происходит (то, что проиходит по выполнении последнего шага)</li>
<li>Что по Вашему мнению должно пройзойти (то, что должно было произойти по выполнению последнего шага)</li>
</ol>
<p>Если необходимо, сопровождайте баг изображениями.</p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/04/%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%be%d1%84%d0%be%d1%80%d0%bc%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b1%d0%b0%d0%b3%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поворот и движение объекта за целью (мышью)</title>
		<link>http://romanuk.net/2009/03/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%b8-%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b7%d0%b0-%d1%86%d0%b5%d0%bb%d1%8c%d1%8e-%d0%bc%d1%8b/</link>
		<comments>http://romanuk.net/2009/03/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%b8-%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b7%d0%b0-%d1%86%d0%b5%d0%bb%d1%8c%d1%8e-%d0%bc%d1%8b/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 06:20:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[flash physics]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[trigonometry in flash]]></category>
		<category><![CDATA[разработка игр]]></category>
		<category><![CDATA[тригонометрия флэш]]></category>
		<category><![CDATA[физика флэш]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=310</guid>
		<description><![CDATA[Данный рецепт предназначен для тех людей, которые хотят создать что-то, что бы преследовало курсор мыши (или любую другую цель), плавно перемещаясь по экрану и поворачиваясь в сторону преследуемого объекта.
Для начала рекомендую к ознакомлению (хотя бы краткому) вот этой статьи.
Итак, традиционно, в начале привожу скрипт, который мы будем разбирать. Можете скачать сразу исходник к себе на [...]]]></description>
			<content:encoded><![CDATA[<p>Данный рецепт предназначен для тех людей, которые хотят создать что-то, что бы преследовало курсор мыши (или любую другую цель), плавно перемещаясь по экрану и поворачиваясь в сторону преследуемого объекта.</p>
<p>Для начала рекомендую к ознакомлению (хотя бы краткому) вот этой <a href="../../../../../2009/02/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%bc%d1%8b%d1%88%d1%8c%d1%8e/">статьи</a>.</p>
<p>Итак, традиционно, в начале привожу скрипт, который мы будем разбирать. Можете скачать сразу исходник к себе на машину, ссылка находится в конце статьи.</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:590px;height:300px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></div></td><td><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">var RAD_DEG:Number = 180 / Math.PI;<br />
<br />
_root.attachMovie (&quot;player&quot;, &quot;player&quot;, 0, {_x:Stage.width / 2, _y:Stage.height / 2});<br />
<br />
game = {};<br />
game.player = {};<br />
game.player.clip = _root[&quot;player&quot;];<br />
game.player.flexibility = 5;<br />
game.player.allowedError = 5;<br />
game.player.speed = 5;<br />
<br />
function rotateObject ():Void<br />
{<br />
var targetAngle:Number = Math.atan2 (game.player.clip._y - _root._ymouse, game.player.clip._x - _root._xmouse);<br />
var errorAngle:Number = targetAngle * 180 / Math.PI - game.player.clip._rotation;<br />
if (Math.abs (errorAngle) &amp;gt; game.player.allowedError)<br />
{<br />
if (((errorAngle &amp;gt; 0) &amp;amp;&amp;amp; (errorAngle &amp;lt; 180)) || (errorAngle &amp;lt; -180))<br />
{<br />
game.player.clip._rotation += game.player.flexibility;<br />
}<br />
else<br />
{<br />
game.player.clip._rotation -= game.player.flexibility;<br />
}<br />
}<br />
}<br />
<br />
function moveClip ():Void<br />
{<br />
game.player.clip._x -= Math.cos (game.player.clip._rotation / RAD_DEG) * game.player.speed;<br />
game.player.clip._y -= Math.sin (game.player.clip._rotation / RAD_DEG) * game.player.speed;<br />
}<br />
<br />
_root.onEnterFrame = function ()<br />
{<br />
rotateObject ();<br />
moveClip ();<br />
}</div></td></tr></tbody></table></div>
<p>В строках с 12 по 27 происходит процесс поворота объекта, который подробно рассмотрен <a href="../2009/02/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%bc%d1%8b%d1%88%d1%8c%d1%8e/">здесь</a>. Я не буду повторно расписывать его в этом рецепте. Давайте посмотрим на строки 29 – 33. Функция <span lang="EN-US">moveClip</span> () выполняет перемещение объекта по экрану. Координата х клипа уменьшается на произведение косинуса угла поворота клипа на скорость объекта. Координата у клипа уменьшается на произведение синуса угла поворота клипа на его скорость объекта. Таким образом, достигается иллюзия плавного поворота и движения.</p>
<p>Смотрим что получилось тут:<br />

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="400" height="300" align="center">
      <param name="movie" value="http://romanuk.net/wp-content/uploads/2009/03/movingrotate.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://romanuk.net/wp-content/uploads/2009/03/movingrotate.swf" width="400" height="300" align="center">
      <!--<![endif]-->
        moving and rotate object around the mouse
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>
<br />
Исходник примера тут: <a href="http://romanuk.net/wp-content/uploads/2009/03/movingrotate.fla">movingrotate</a></p>
<p><!-- google adsense START --><br />
<script type="text/javascript"><!--
google_ad_client = "pub-2792798622619255";
/* 468x60, created 3/30/09 */
google_ad_slot = "1743923613";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<!-- google adsense END --></p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/03/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%b8-%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b7%d0%b0-%d1%86%d0%b5%d0%bb%d1%8c%d1%8e-%d0%bc%d1%8b/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Создание шрифта во Flash CS3</title>
		<link>http://romanuk.net/2009/02/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%88%d1%80%d0%b8%d1%84%d1%82%d0%b0-%d0%b2%d0%be-flash-cs3/</link>
		<comments>http://romanuk.net/2009/02/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%88%d1%80%d0%b8%d1%84%d1%82%d0%b0-%d0%b2%d0%be-flash-cs3/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 16:39:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=293</guid>
		<description><![CDATA[Недавно понадобилось создать шрифт во Flash. К своему изумлению я понял, что это для меня загадка. Но я ее разгадал, вот рецепт:
1. Если у вас закрыто окно библиотеки клипов (library) откройте его (Window &#8211; Library или Ctrl + L).
2. Далее кликаем кнопочку (честно говоря не знаю точного названия) More options, как показано на картинке.
3. Из [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно понадобилось создать шрифт во Flash. К своему изумлению я понял, что это для меня загадка. Но я ее разгадал, вот рецепт:</p>
<p>1. Если у вас закрыто окно библиотеки клипов (library) откройте его (Window &#8211; Library или Ctrl + L).</p>
<p>2. Далее кликаем кнопочку (честно говоря не знаю точного названия) More options, как показано на картинке.</p>
<div id="attachment_294" class="wp-caption aligncenter" style="width: 230px"><a href="http://romanuk.net/wp-content/uploads/2009/02/library.png"><img class="size-full wp-image-294" title="library" src="http://romanuk.net/wp-content/uploads/2009/02/library.png" alt="flash cs3 library view" width="220" height="283" /></a><p class="wp-caption-text">flash cs3 library view</p></div>
<p>3. Из меню выбираем опцию New font.</p>
<p>Все, диалоговое окно позволит вам добавить нужный шрифт с предустановленными параметрами. Если вы не знаете что с ним делать, расслабтесь, главное что вы знаете как его добавлять. Поверьте на слово, когда-нибудь это вам пригодится. <img src='http://romanuk.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/02/%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%88%d1%80%d0%b8%d1%84%d1%82%d0%b0-%d0%b2%d0%be-flash-cs3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поворот объекта мышью</title>
		<link>http://romanuk.net/2009/02/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%bc%d1%8b%d1%88%d1%8c%d1%8e/</link>
		<comments>http://romanuk.net/2009/02/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%bc%d1%8b%d1%88%d1%8c%d1%8e/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 06:46:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash physics]]></category>
		<category><![CDATA[flash игры]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[trigonometry in flash]]></category>
		<category><![CDATA[разработка игр]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=257</guid>
		<description><![CDATA[Поворот объекта за мышью реализуется очень просто. Надо просто в каждом кадре присваивать свойству _rotation клипа игрока (объекта) арктангенс угла положения мыши на экране относительно этого клипа. Наверное, прочитав предыдущее предложение, Вы погрустнели. Но это не беда. Я и сам до конца не понимаю этого.   Добрые индусы, писавшие Flash, позаботились о том, что [...]]]></description>
			<content:encoded><![CDATA[<p>Поворот объекта за мышью реализуется очень просто. Надо просто в каждом кадре присваивать свойству _rotation клипа игрока (объекта) арктангенс угла положения мыши на экране относительно этого клипа. Наверное, прочитав предыдущее предложение, Вы погрустнели. Но это не беда. Я и сам до конца не понимаю этого. <img src='http://romanuk.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Добрые индусы, писавшие Flash, позаботились о том, что бы класс Math содержал готовую функцию atan2 (), которую мы и будем использовать для нахождения этого арктангенса угла..</p>
<p>Давайте рассмотрим код actionscript:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:590px;height:300px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">_root.attachMovie (&quot;player&quot;, &quot;player&quot;, 0, {_x:Stage.width / 2, _y:Stage.height / 2});<br />
<br />
game = {};<br />
game.player = {};<br />
game.player.clip = _root[&quot;player&quot;];<br />
game.player.flexibility = 5;<br />
game.player.allowedError = 5;<br />
<br />
function rotateObject ():Void<br />
{<br />
var targetAngle:Number = Math.atan2 (game.player.clip._y - _root._ymouse, game.player.clip._x - _root._xmouse);<br />
var errorAngle:Number = targetAngle * 180 / Math.PI - game.player.clip._rotation;<br />
if (Math.abs (errorAngle) &amp;gt; game.player.allowedError)<br />
{<br />
if (((errorAngle &amp;gt; 0) &amp;amp;&amp;amp; (errorAngle &amp;lt; 180)) || (errorAngle &amp;lt; -180))<br />
{<br />
game.player.clip._rotation += game.player.flexibility;<br />
}<br />
else<br />
{<br />
game.player.clip._rotation -= game.player.flexibility;<br />
}<br />
}<br />
}<br />
<br />
_root.onEnterFrame = function ()<br />
{<br />
rotateObject ();<br />
}</div></td></tr></tbody></table></div>
<p>Вначале мы добавляем клип с игроком на экран. Затем создаем объект game, в котором будем хранить всю информацию об игре. Обратите внимание как мы связываем добавленный клип игрока, с свойством clip объекта game.player. Теперь мы можем использовать это свойство если захотим провести какую-либо операцию с клипом на сцене. О свойствах flexibility и allowedError мы поговорим чуть ниже, а пока давайте перейдем к разбору функции rotateObject ().</p>
<p>Итак, пресловутая функция atan2, о которой я вкратце упоминал в начале статьи. Именно она будет делать основную работу и нам совершенно неважно как она ее будет делать, потому что на выходе мы будем получать именно тот угол, на который надо повернуть наш клип игрока, что бы он смотрел прямо на указатель мыши. Пожалуйста, почитайте в help’е Flash о том как она работает, мы же только коснемся тех параметров, которые надо передавать в эту функцию. Итак, первый параметр – это расстояние по оси Y от объекта игрока до Y координаты мыши, второй параметр – это расстояние по оси X от объекта игрока до X координаты мыши. Как расстояние определяется на прямой линии? Правильно, вычитанием одной координаты из другой. Это мы и делаем прямо при внесении параметров в функцию, т.е. налету.<br />
В принципе, на этом можно было бы и остановится, так как мы уже имеем угол, на который надо поворачивать наш игровой объект. Мы этот угол можем присваивать свойству _rotation нашего клипа и он будет поворачиваться. Но в таком случае это будет происходить мгновенно.<br />
Если Вы хотите добавить немного реалистичности в процесс поворота, то вам надо несколько замедлить этот процесс. И вправду ведь, невозможно повернутся мгновенно, в природе все происходит с определенной задержкой.<br />
Итак, следующие строки кода, начиная с объявления переменной errorAngle замедляют и управляют процессом поворота. errorAngle – это величина, показывающая, на сколько отличается текущий угол поворота объекта от угла, на который надо повернуть объект, что бы он смотрел прямо на мышку. Дальше происходит проверка на то, на сколько ошибка отклонения больше или меньше реального угла поворота, и если она отличается на величину allowedError, то делается коррекция, т.е. объект поворачивается по или против часовой стрелке.<br />
Flexibility влияет на то, как быстро объект будет поворачиваться. В флэш играх это очень важный показатель, влияющий на верткость объекта. Так, например, меняя этот показатель от меньшего к большему можно сделать несколько самонаводящихся ракет с различной степенью маневренности.<br />
allowedError это то допустимое значение ошибки отклонения при котором поворот происходить не будет. Т.е. она позволяет создать некий коридор (например, до 5 градусов), при котором поворот происходить не будет.</p>
<p>Не думал что получится столько букв, но надеюсь, эти комментарии хоть как-то помогут Вам разобраться в происходящем. Если нет, рекомендую к прочтению книгу «Flash. Трюки» O’Relly. Приведенный в данной статье метод полностью основывается на одном из трюков этой книги.</p>
<p>Исходник с примером поворота объекта мышью во Flash (.fla):</p>
<p><a href="http://romanuk.net/wp-content/uploads/2009/02/rotateobject.rar">rotateobject</a></p>
<p>Пример поворота объекта мышью во Flash (.swf)</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_1" width="400" height="300" align="center">
      <param name="movie" value="http://romanuk.net/wp-content/uploads/2009/02/rotateobject2.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://romanuk.net/wp-content/uploads/2009/02/rotateobject2.swf" width="400" height="300" align="center">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p><a href="http://romanuk.net/wp-content/uploads/2009/02/rotateobject.swf">rotateobject</a></p>
<p><!-- google adsense START --><br />
<script type="text/javascript"><!--
google_ad_client = "pub-2792798622619255";
/* 468x60, created 3/30/09 */
google_ad_slot = "1743923613";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<!-- google adsense END --></p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/02/%d0%bf%d0%be%d0%b2%d0%be%d1%80%d0%be%d1%82-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%bc%d1%8b%d1%88%d1%8c%d1%8e/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Движение объекта в пределах более чем одного экрана</title>
		<link>http://romanuk.net/2009/02/%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b2-%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b0%d1%85-%d0%b1%d0%be%d0%bb%d0%b5%d0%b5-%d1%87%d0%b5%d0%bc/</link>
		<comments>http://romanuk.net/2009/02/%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b2-%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b0%d1%85-%d0%b1%d0%be%d0%bb%d0%b5%d0%b5-%d1%87%d0%b5%d0%bc/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 17:05:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[флэш игры]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=233</guid>
		<description><![CDATA[Одной из первых задач, которые должен решить начинающий программист флэш игр – это то, как заставить героя (будь то космический корабль, воин или черепашка  ) двигаться по экрану не только в пределах обозначенных разрешением монитора (например 1024х768), но и за ними.
Как же это сделать?
Давайте посмотрим на проблему со стороны. У нас есть герой, у [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из первых задач, которые должен решить начинающий программист флэш игр – это то, как заставить героя (будь то космический корабль, воин или черепашка <img src='http://romanuk.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) двигаться по экрану не только в пределах обозначенных разрешением монитора (например 1024х768), но и за ними.</p>
<p>Как же это сделать?</p>
<p>Давайте посмотрим на проблему со стороны. У нас есть герой, у нас есть экран монитора. Если герой перемещается в какую-либо сторону он неуклонно двигается к границе экрана,  рано или поздно достигнет ее и скроется за ней. Но это недопустимо. </p>
<p>Следовательно, герой вообще не должен перемещаться, он должен стоять на месте. В то же время весь мир во круг него должен двигаться. Таким образом будет достигнута иллюзия перемещения героя по местности, намного превышающей размеры монитора.</p>
<p>Давайте посмотрим более подробно, как это можно реализовать с помощью Flash.</p>
<p>1. Добавляем экземпляр клипа героя на сцену, размещая его посередине экрана (в библиотеке должен быть клип с именем player).</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:590px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">_root</span>.<span class="kw3">attachMovie</span> <span class="br0">&#40;</span><span class="st0">&quot;player&quot;</span>, <span class="st0">&quot;player&quot;</span>, <span class="nu0">1</span>, <span class="br0">&#123;</span><span class="kw3">_x</span>:<span class="kw3">Stage</span>.<span class="kw3">width</span> <span class="sy0">/</span> <span class="nu0">2</span>, <span class="kw3">_y</span>:<span class="kw3">Stage</span>.<span class="kw3">height</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div></td></tr></tbody></table></div>
<p>2. Добавляем экземпляр клипа локации на сцену. Это может быть просто пустой клип, к которому потом можно будет добавлять другие клипы, которые будут создавать атмосферу игрового уровня (например, если вы делаете космический экшн, можно будет добавить звезды, астероиды, планеты и прочие элементы).</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:590px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">_root</span>.<span class="kw3">attachMovie</span> <span class="br0">&#40;</span>“location”, “location”, <span class="nu0">0</span><span class="br0">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Обратите внимание: клип игрока расположен над клипом с локацией.</p>
<p>Теперь, когда у нас есть оба клипа на сцене, надо заставить двигаться клип с локацией, для создания иллюзии передвижения.<br />
3. Давайте создадим объект game, в котором будем хранить все данные об игре:</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:590px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace">game = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
game.<span class="me1">player</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
game.<span class="me1">location</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
game.<span class="me1">player</span>.<span class="me1">clip</span> = <span class="kw3">_root</span><span class="br0">&#91;</span>“player”<span class="br0">&#93;</span>;<br />
game.<span class="me1">location</span>.<span class="me1">clip</span> = <span class="kw3">_root</span><span class="br0">&#91;</span>“location”<span class="br0">&#93;</span>;<br />
game.<span class="me1">player</span>.<span class="me1">speed</span> = <span class="nu0">1</span>;</div></td></tr></tbody></table></div>
<p>Теперь, мы имеем удобные ссылки, которые можем использовать для обращения к клипам практически из любого места кода. А вот собственно и сам механизм передвижения клипа локации:</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:590px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">public</span> <span class="kw2">function</span> moveLocationClip <span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Void</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; game.<span class="me1">location</span>.<span class="me1">clip</span>.<span class="kw3">_x</span> += <span class="kw3">Math</span>.<span class="kw3">cos</span> <span class="br0">&#40;</span>game.<span class="me1">player</span>.<span class="me1">clip</span>.<span class="kw3">_rotation</span> <span class="sy0">/</span> RAD_DEG<span class="br0">&#41;</span> <span class="sy0">*</span> game.<span class="me1">player</span>.<span class="me1">speed</span>;<br />
&nbsp; &nbsp; game.<span class="me1">location</span>.<span class="me1">clip</span>.<span class="kw3">_y</span> += <span class="kw3">Math</span>.<span class="kw3">sin</span> <span class="br0">&#40;</span>game.<span class="me1">player</span>.<span class="me1">clip</span>.<span class="kw3">_rotation</span> <span class="sy0">/</span> RAD_DEG<span class="br0">&#41;</span> <span class="sy0">*</span> game.<span class="me1">player</span>.<span class="me1">speed</span>;<br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>где: RAD_DEG – это константа, позволяющая переводить значение выраженное в радианах в градусы (RAD_DEG = 180 / Pi);<br />
game.player.speed – скорость движения объекта (посмотрите, ранее мы присвоили этому свойству значение 1, т.е. скорость равна 1 пиксель / кадр);<br />
game.player.clip._rotation – угол поворота клипа игрока на сцене, он определяет в какую сторону будет двигаться локация.</p>
<p>Поместив данную функцию в обработчик onEnterFrame мы добьемся того, что с наступлением каждого нового кадра, локация будет перемещаться по оси x и y в соответствии с углом поворота клипа игрока и его скорости.</p>
<p>Можете посмотреть что получилось здесь:<br />

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_2" width="400" height="300" align="center">
      <param name="movie" value="http://romanuk.net/wp-content/uploads/2009/02/backgroundmoving2.swf" />
      <param name="align" value="center" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://romanuk.net/wp-content/uploads/2009/02/backgroundmoving2.swf" width="400" height="300" align="center">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>
<br />
<a href='http://romanuk.net/wp-content/uploads/2009/02/backgroundmoving.swf'>backgroundmoving</a><br />
Пример .fla здесь:<br />
<a href='http://romanuk.net/wp-content/uploads/2009/02/backgroundmoving.rar'>backgroundmoving</a></p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/02/%d0%b4%d0%b2%d0%b8%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0-%d0%b2-%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b0%d1%85-%d0%b1%d0%be%d0%bb%d0%b5%d0%b5-%d1%87%d0%b5%d0%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cassiopeia &#8211; Доска счета</title>
		<link>http://romanuk.net/2009/02/cassiopeia-%d0%b4%d0%be%d1%81%d0%ba%d0%b0-%d1%81%d1%87%d0%b5%d1%82%d0%b0/</link>
		<comments>http://romanuk.net/2009/02/cassiopeia-%d0%b4%d0%be%d1%81%d0%ba%d0%b0-%d1%81%d1%87%d0%b5%d1%82%d0%b0/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 07:19:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[Cassiopeia]]></category>
		<category><![CDATA[flash game]]></category>
		<category><![CDATA[разработка игр]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=223</guid>
		<description><![CDATA[Рад представить новую фичу Игры &#8211; доска счета. Теперь пользователь сможет регистрироватся, отсылать свой счет, а так же смотреть счет других игроков.


Все данные хранятся в xml файле, который лежит на сервере. Отправка данных работает через скрипт Perl. Пока что (из соображений производительности) в таблицу могут попасть только 50 человек с наивысшим значением High score. Т.е. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Рад представить новую фичу Игры &#8211; доска счета. Теперь пользователь сможет регистрироватся, отсылать свой счет, а так же смотреть счет других игроков.</p>
<p style="text-align: left;">
<div id="attachment_227" class="wp-caption aligncenter" style="width: 310px"><a href="http://romanuk.net/wp-content/uploads/2009/02/highscoreview1.png"><img class="size-medium wp-image-227" title="high score view" src="http://romanuk.net/wp-content/uploads/2009/02/highscoreview1-300x216.png" alt="Доска счета Cassiopeia" width="300" height="216" /></a><p class="wp-caption-text">Доска счета Cassiopeia</p></div>
<p style="text-align: center;">
<p>Все данные хранятся в xml файле, который лежит на сервере. Отправка данных работает через скрипт Perl. Пока что (из соображений производительности) в таблицу могут попасть только 50 человек с наивысшим значением High score. Т.е. если таблица уже содержит 50 записей, и кто-то отправил High score, значение которого выше самого низкого значения из таблицы, то таблица будет пересортирована и последняя запись будет удалена.</p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/02/cassiopeia-%d0%b4%d0%be%d1%81%d0%ba%d0%b0-%d1%81%d1%87%d0%b5%d1%82%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проверка плагина подсветки ActionScript кода</title>
		<link>http://romanuk.net/2009/01/%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%bf%d0%bb%d0%b0%d0%b3%d0%b8%d0%bd%d0%b0-%d0%bf%d0%be%d0%b4%d1%81%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-actionscript-%d0%ba%d0%be%d0%b4%d0%b0/</link>
		<comments>http://romanuk.net/2009/01/%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%bf%d0%bb%d0%b0%d0%b3%d0%b8%d0%bd%d0%b0-%d0%bf%d0%be%d0%b4%d1%81%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-actionscript-%d0%ba%d0%be%d0%b4%d0%b0/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 08:56:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[флэш]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=198</guid>
		<description><![CDATA[Давно хотел себе поставить плагин для подсветки кода в постах. И вот, после долгих, но как оказалось плодотворных поисков я смог его найти и установить.
Плагин поддерживает огромное количество языков и имеет мощную систему настроек. Советую.  
1234567891011121314151617181920private function sortScore &#40;&#41;:Void
&#123;
&#160; &#160; var id:Number = 0;
&#160; &#160; cassio.fw.sHs = &#123;&#125;;
&#160; &#160; for &#40;var i:Number = 0; [...]]]></description>
			<content:encoded><![CDATA[<p>Давно хотел себе поставить <a href="http://kpumuk.info/projects/wordpress-plugins/codecolorer/lang/ru/">плагин для подсветки кода</a> в постах. И вот, после долгих, но как оказалось плодотворных поисков я смог его найти и установить.</p>
<p>Плагин поддерживает огромное количество языков и имеет мощную систему настроек. Советую. <img src='http://romanuk.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:590px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">private</span> <span class="kw2">function</span> sortScore <span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Void</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> id:<span class="kw3">Number</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; cassio.<span class="me1">fw</span>.<span class="me1">sHs</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">Number</span> = <span class="nu0">0</span>; i <span class="sy0">&lt;</span> cassio.<span class="me1">fw</span>.<span class="me1">hs</span>.<span class="me1">nLength</span>; i++<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> j:<span class="kw3">Number</span> = <span class="nu0">0</span>; j <span class="sy0">&lt;</span> cassio.<span class="me1">fw</span>.<span class="me1">hs</span>.<span class="me1">nLength</span>; j++<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">score</span> <span class="sy0">&lt;</span> cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">score</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span>cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>j<span class="br0">&#93;</span>.<span class="me1">isChecked</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id = j;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; cassio.<span class="me1">fw</span>.<span class="me1">sHs</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; cassio.<span class="me1">fw</span>.<span class="me1">sHs</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">score</span> = cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">score</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; cassio.<span class="me1">fw</span>.<span class="me1">sHs</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">username</span> = cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">username</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; cassio.<span class="me1">fw</span>.<span class="me1">hs</span><span class="br0">&#91;</span>id<span class="br0">&#93;</span>.<span class="me1">isChecked</span> = <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; id = getFirstUncheckedElementId <span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; <br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/01/%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%bf%d0%bb%d0%b0%d0%b3%d0%b8%d0%bd%d0%b0-%d0%bf%d0%be%d0%b4%d1%81%d0%b2%d0%b5%d1%82%d0%ba%d0%b8-actionscript-%d0%ba%d0%be%d0%b4%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Фаза 7. Шлифовка.</title>
		<link>http://romanuk.net/2009/01/%d1%84%d0%b0%d0%b7%d0%b0-7-%d1%88%d0%bb%d0%b8%d1%84%d0%be%d0%b2%d0%ba%d0%b0/</link>
		<comments>http://romanuk.net/2009/01/%d1%84%d0%b0%d0%b7%d0%b0-7-%d1%88%d0%bb%d0%b8%d1%84%d0%be%d0%b2%d0%ba%d0%b0/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 13:34:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cassiopeia]]></category>
		<category><![CDATA[Создание Flash игр]]></category>
		<category><![CDATA[разработка игр]]></category>
		<category><![CDATA[флэш]]></category>
		<category><![CDATA[флэш игры]]></category>

		<guid isPermaLink="false">http://romanuk.net/?p=191</guid>
		<description><![CDATA[&#171;Собирание камней прошло&#187; удачно, теперь надо отшлифовать то, что получилось. Вот план, надеюсь завершающей фазы разработки Cassiopeia.

Фаза 7. (0/11) Шлифовка.
1. Улучшение ИИ.
1.1. Противник не нападает если игрок не приблизился на определенное расстояние (1000 px)
1.2. При встречном движении противник летит без изменения курса в течении нескольких секунд, затем совершает поворот.
1.3. Разработка метода moveToTarget () для движени [...]]]></description>
			<content:encoded><![CDATA[<p>&laquo;Собирание камней прошло&raquo; удачно, теперь надо отшлифовать то, что получилось. Вот план, надеюсь завершающей фазы разработки Cassiopeia.</p>
<p><span id="more-191"></span></p>
<p>Фаза 7. (0/11) Шлифовка.<br />
1. Улучшение ИИ.<br />
1.1. Противник не нападает если игрок не приблизился на определенное расстояние (1000 px)<br />
1.2. При встречном движении противник летит без изменения курса в течении нескольких секунд, затем совершает поворот.<br />
1.3. Разработка метода moveToTarget () для движени к цели (если есть).<br />
1.4. Остановка если цель потеряна.<br />
2. Улучшение стартового меню.<br />
2.1. Разработка методов List () для отображения информации в специальных контейнерах.<br />
2.2. Создание анимационного эффекта вспышки при отображении и переключении между информационными окнами (напр.Controls -&gt; About)<br />
2.3. Добавление движщихся комет (создание класса для управления кометами с последующей интеграцией на backframe)<br />
2.4. Создание окна Controls.<br />
2.5. создание окна About.<br />
2.6. Создание окна High Scores.<br />
2.6.1. High Score хранится на сервере в xml.<br />
2.6.2. отображаются только первые 100 игроков.<br />
2.6.3. Для отправки счета необходимо ввести имя.<br />
2.6.4. Имя должно быть уникальным.<br />
2.6.5. High score &#8211; это сумма заработанных игроком кредитов.<br />
3. Улучшение UpgWindow класса<br />
3.1. Создание возможности динамического отображения списков вооружений.<br />
3.2. Создание кнопок Buy / Sell.<br />
3.2.1. Buy отображается если есть возможность купить: достаточное количество денег, доступны слоты для предмета..<br />
3.2.1. Sell отображается возле установленного в текущий момент оборудования.<br />
3.3. ПЛавное отображение окна.<br />
3.4. Плавное закрытие окна.<br />
3.5. Добавление закладки для квестов и торговли.<br />
4. Добавление всех типов станций.<br />
5. Добавление всех типов фона.<br />
6. Звуковое сопровождение.<br />
6.1. Звуки выстрелов.<br />
6.2. Звуки взрыва (ракет и кораблей).<br />
6.3. Звуки двигателей.<br />
6.3. Звуки клика по кнопкам меню.<br />
7. Кастомизация цвета лазера в зависимости от его типа.<br />
8. Добавление новых типов кораблей.<br />
9. Улучшение логики добавление кораблей противника.<br />
9.1. Использование xml для хранения типов кораблей.<br />
9.2. Сила корабля зависит от его типа (необходимо создать конфигруации кораблей от слабых к сильным).<br />
9.3. Создание механизма подсчета количества денег за сбитый корабль врага, в зависимости от его типа.<br />
10. Создание возможности загрузить или начать новую игру при уничтожении корабля игрока.<br />
10.1. При загрузке &#8211; игра загружается с последней станции, которую посетил игрок.<br />
10.2. При выборе начать заново &#8211; игра начинается заново, Shared object очищается.<br />
10.3. Затемнение экрана<br />
11. Индикатор загрузки</p>
]]></content:encoded>
			<wfw:commentRss>http://romanuk.net/2009/01/%d1%84%d0%b0%d0%b7%d0%b0-7-%d1%88%d0%bb%d0%b8%d1%84%d0%be%d0%b2%d0%ba%d0%b0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
