<?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; اکشن اسکریپت</title>
	<atom:link href="http://blog.iflashlord.com/tag/%d8%a7%da%a9%d8%b4%d9%86-%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.iflashlord.com</link>
	<description>دست نوشته های یک پادشاه فلش</description>
	<lastBuildDate>Wed, 11 Jan 2012 12:09:13 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Citrus Engine رایگان و اوپن سورس!</title>
		<link>http://blog.iflashlord.com/1390/08/citrus-engine-%d8%b1%d8%a7%db%8c%da%af%d8%a7%d9%86-%d9%88-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3/</link>
		<comments>http://blog.iflashlord.com/1390/08/citrus-engine-%d8%b1%d8%a7%db%8c%da%af%d8%a7%d9%86-%d9%88-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 01:19:52 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[عمومی]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[Citrus]]></category>
		<category><![CDATA[Citrus Engine]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[اوپن سورس]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[بازی]]></category>
		<category><![CDATA[حرفه ای]]></category>
		<category><![CDATA[رایگان]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[قابل گسترش]]></category>
		<category><![CDATA[موتور]]></category>
		<category><![CDATA[موتور بازی سازی]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1618</guid>
		<description><![CDATA[Citrus Engine چست؟ یک موتور بازی سازی با درجه حرفه ای ، قابل گسترش ، و با کیفیت صنعتی برای ساخت بازی فلش می باشد ، این موتور بر اساس شیوه های مدرن برنامه نویسی فلش ساخته شده است و تمرکز آن در کمک به شما برای ساخت یک بازی بسیار جذاب می باشد. برای [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/11/ce2_game_engine_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>Citrus Engine چست؟</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">یک موتور بازی سازی با درجه حرفه ای ، قابل گسترش ، و با کیفیت صنعتی برای ساخت بازی فلش می باشد ، این موتور بر اساس شیوه های مدرن برنامه نویسی فلش ساخته شده است و تمرکز آن در کمک به شما برای ساخت یک بازی بسیار جذاب می باشد. <a href="http://citrusengine.com/about" target="_blank">برای اطلاعات بیشتر به این صفحه مراجعه کنید</a>.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1618"></span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>این موتور در گذشته با قیمتی حدود ۴۰۰ دلار در اختیار کاربران و توسعه دهندگان قرار می گرفته است که خوشبختانه هم اکنون به صورت رایگان و اوپن سورس می باشد.</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">کاربرد اصلی این موتور برای ساخت بازی های پلاتفورمر می باشد ، برای هسته این موتور از زبان اکشن اسکریپت ۳ استفاده شده است که بخش تحلیل فیزیکی آن نیز توسط box2d کنترل می شود ، نمونه ای از این دست بازی ها را می توانید در <a href="http://citrusengine.com/" target="_blank">صفحه اول وب سایت Citrus Engine </a>ببنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در ضمن این موتور با یک نرم افزار برای ساخت مرحله کار ساخت مراحل بازی را ساده و ساده تر می کند ، این نرم افزار توسط ادوبی ایر ایجاد شده است ، پیشنهاد می کنم این برنامه را هم حتما تست نمایید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">نکته مهم در مورد استفاده از موتورهای بازی سازی ، نیاز داشتن به دانش کمتر در مورد بازی سازی و برنامه نویسی می باشد که می تواند گروه زیادی را وارد دنیای جذاب بازی سازی در فلش نماید..</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">فکر می کنم هم اکنون وقت آن باشد که شما هم با این موتور بیشتر آشنا شوید و آن را محکی بزنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><a href="http://citrusengine.com/" target="_blank">وب سایت رسمی <strong>Citrus Engine</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/08/citrus-engine-%d8%b1%d8%a7%db%8c%da%af%d8%a7%d9%86-%d9%88-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>دریافت کردن مرورگر و سیستم عامل کاربر توسط اکشن اسکریپت ۳</title>
		<link>http://blog.iflashlord.com/1390/08/%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa-%da%a9%d8%b1%d8%af%d9%86-%d9%85%d8%b1%d9%88%d8%b1%da%af%d8%b1-%d9%88-%d8%b3%db%8c%d8%b3%d8%aa%d9%85-%d8%b9%d8%a7%d9%85%d9%84-%da%a9%d8%a7%d8%b1%d8%a8%d8%b1/</link>
		<comments>http://blog.iflashlord.com/1390/08/%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa-%da%a9%d8%b1%d8%af%d9%86-%d9%85%d8%b1%d9%88%d8%b1%da%af%d8%b1-%d9%88-%d8%b3%db%8c%d8%b3%d8%aa%d9%85-%d8%b9%d8%a7%d9%85%d9%84-%da%a9%d8%a7%d8%b1%d8%a8%d8%b1/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 01:14:51 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[ExtenalInterface]]></category>
		<category><![CDATA[externalinterface.call]]></category>
		<category><![CDATA[F12]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[getUserAgent]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[indexOf]]></category>
		<category><![CDATA[MouseEvent]]></category>
		<category><![CDATA[MouseEvent.MOUSE_UP]]></category>
		<category><![CDATA[navigator]]></category>
		<category><![CDATA[Properties]]></category>
		<category><![CDATA[Publish]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Shift+Ctlr+F12]]></category>
		<category><![CDATA[Sprite]]></category>
		<category><![CDATA[TextField]]></category>
		<category><![CDATA[transitions]]></category>
		<category><![CDATA[Tween]]></category>
		<category><![CDATA[User Agent]]></category>
		<category><![CDATA[userAgent]]></category>
		<category><![CDATA[window.navigator.userAgent.toString]]></category>
		<category><![CDATA[اسکریپت]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[جستجو]]></category>
		<category><![CDATA[دانلود]]></category>
		<category><![CDATA[درگ]]></category>
		<category><![CDATA[رابط کاربری]]></category>
		<category><![CDATA[سورس]]></category>
		<category><![CDATA[سیستم عامل]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[مرورگر]]></category>
		<category><![CDATA[هوشمند]]></category>
		<category><![CDATA[کاربر]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=737</guid>
		<description><![CDATA[در این مطلب به چگونگی تشخیص نوع مرورگر اینترنتی و سیستم عامل کاربر توسط اکشن اسکریپت ۳ می پردازیم. دانلود سورس : external_interface_source_iflashlord ما در این مطلب با استفاده از TextField و با کمک گرفتم از کلاس ExtenalInterface اطلاعات مربوطه به کاربر را دریافت و خروجی swf فلش نمایش می دهیم. توسط دریافت مقدار userAgent [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/11/user_agent_browser_os_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این مطلب به چگونگی تشخیص نوع مرورگر اینترنتی و سیستم عامل کاربر توسط اکشن اسکریپت ۳ می پردازیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-737"></span></p>
<blockquote><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">دانلود سورس : <a title="external_interface_source_iflashlord" href="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_source_iflashlord.zip">external_interface_source_iflashlord</a></p></blockquote>
<h2></h2>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">ما در این مطلب با استفاده از TextField و با کمک گرفتم از کلاس ExtenalInterface اطلاعات مربوطه به کاربر را دریافت و خروجی swf فلش نمایش می دهیم. توسط دریافت مقدار userAgent مربوطه به navigator و کمی جستجو در محتوای متنی خروجی آن می توانیم به نام مرورگر اینترنتی مورد استفاده پی ببریم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">برای شروع یک سند فلش با سایز ۴۰۰ در ۲۰۰ پیکسل و فریم ریت ۲۴fps ایجاد می کنیم.</p>
<div>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1560" title="external_interface_new_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_new_iflashlord.jpg" alt="" width="459" height="182" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در مرحله بعد به طراحی رابط کاربری پروژه می پردازیم در شکل زیر می توانید نمونه را مشاهده کنید.</p>
</div>
<div>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1561" title="external_interface_gui_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_gui_iflashlord.jpg" alt="" width="400" height="240" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">این نمونه را می توانید در<a href="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_source_iflashlord.zip" target="_blank"> سورس پروژه </a>که در ابتدای مطلب لینک آموزش آن وجود دارد دریافت کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">حال یک کلاس اکشن اسکریپت ایجاد می کنیم برای این کار می توانید از کلید های ترکیبی Ctrl+N استفاده کنید و سپس پروژه را با نام Main.as در کنار فایل سورس فلش خود ذخیره کنید. و محتوای زیر را در آن قرار دهید.</p>
</div>
<pre class="brush: as3; title: ; notranslate">

package
{
	import flash.display.Sprite;
	import flash.external.ExternalInterface;
	import flash.events.MouseEvent;
	import fl.transitions.Tween;
	public class Main extends Sprite
	{
		private var userAgent:String;
		public function Main():void
		{
			more.addEventListener(MouseEvent.MOUSE_UP, showFull);
			browserTxt.text = getUserAgent();
			letterpress.text = getUserAgent();
		}

		private function getUserAgent():String
		{
			userAgent = ExternalInterface.call(&quot;window.navigator.userAgent.toString&quot;);

			var browser:String;
			if (userAgent.indexOf(&quot;Safari&quot;) != -1)
			{
				browser = &quot;Safari&quot;;
			}
			else if (userAgent.indexOf(&quot;Firefox&quot;) != -1)
			{
				browser = &quot;Firefox&quot;;
			}
			if (userAgent.indexOf(&quot;Chrome&quot;) != -1)
			{
				browser = &quot;Chrome&quot;;
			}
			return browser;
		}
		private function showFull(e:MouseEvent):void
		{
			info.fullInfo.text = userAgent;
			var tween:Tween = new Tween(info,&quot;y&quot;,null,info.y,180,0.5,true);
		}
	}
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در کد بالا توسط ExternalInterface و متد call محتوای مربوطه به User Agent به صورت یک رشته متنی دریافت می شود و با استفاده از متد indexOf در آن جستجو می شود و در نتیجه نام مروگر دریافت می شود ؛ در این روش محتوای User Agent جستجو می شود اگر نام مرورگر هایی که در نظر گرفته ایم در محتوای بازگشتی وجود داشته باشد ،نام مرورگر در صفحه نمایش داده می شود. و توسط دکمه more که در پروژه قرار داده شده است نیز در بخش پایینی پروژه محتوای کلی مربوطه به User Agent در فیلد متنی info با انیمیتی که توسط Tween به آن اعمال می شود ،به نمایش گذاشته می شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">به یاد داشته باشید که نام class را در فیلد مربوطه به Class در بخش Publish مربوطه به پانل Properties وارد نمایید. در تصویر زیر بخش مربوطه نمایش داده شده است.</p>
<div>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1562" title="external_interface_main_class_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_main_class_iflashlord.jpg" alt="" width="282" height="132" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">حال برای تست به صورت فایل swf شما با خطا رو به رو می شود ، شما می بایست فایل را در مرورگر اینترنتی به نمایش بگذارید تا امکان دریافت داده های User Agent وجود داشته باشد.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">برای این کار می می توانید از کلید های میان بر  Shift+Ctlr+F12 استفاده کنید و بخش مربوطه به HTML را در صورت غیر فعال بودن تیک بزنید و توسط و توسط منوی File-&gt; Publish برای انتشار پروژه به صورت HTML اقدام نمایید در صورتی که می خواهید پروژه بعد از انتشار و تولید شدن بلافاصله در مرورگر پیش فرض نمایش داده شود از کلید F12 استفاده نمایید ،در ضمن می توانید فایل خود درگ کرده و درون مرورگر مورد نظر رها کنید تا عملکرد کد را مشاهده نمایید.</p>
</div>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">شما می توانید با استفاده از این اطلاعات با توجه به نوع مرورگر کاربر تغییرات احتمالی مورد نیاز را در پروژه خود که برای هر مرورگر و یا مرورگر خاصی نیاز دارید ، اعمال نمایید و برنامه ای پویا و هوشمند توسط فلش ایجاد نمایید.</p>
<blockquote><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">دانلود سورس : <a title="external_interface_source_iflashlord" href="http://blog.iflashlord.com/wp-content/uploads/2011/11/external_interface_source_iflashlord.zip">external_interface_source_iflashlord</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/08/%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa-%da%a9%d8%b1%d8%af%d9%86-%d9%85%d8%b1%d9%88%d8%b1%da%af%d8%b1-%d9%88-%d8%b3%db%8c%d8%b3%d8%aa%d9%85-%d8%b9%d8%a7%d9%85%d9%84-%da%a9%d8%a7%d8%b1%d8%a8%d8%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ایجاد چرخش افقی اشیاء با استفاده از کلاس Matrix</title>
		<link>http://blog.iflashlord.com/1390/08/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%86%d8%b1%d8%ae%d8%b4-%d8%a7%d9%81%d9%82%db%8c-%d8%a8%d8%a7-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-matrix/</link>
		<comments>http://blog.iflashlord.com/1390/08/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%86%d8%b1%d8%ae%d8%b4-%d8%a7%d9%81%d9%82%db%8c-%d8%a8%d8%a7-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-matrix/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 01:34:43 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[addChild]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[beginFill]]></category>
		<category><![CDATA[drawCircle]]></category>
		<category><![CDATA[endFill]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flip]]></category>
		<category><![CDATA[flipHorizontal]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[Horizontal]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[matrix.a]]></category>
		<category><![CDATA[matrix.tx]]></category>
		<category><![CDATA[MovieClip]]></category>
		<category><![CDATA[Point]]></category>
		<category><![CDATA[rotation]]></category>
		<category><![CDATA[transform.matrix]]></category>
		<category><![CDATA[transformPoint]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[ماتریس]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1501</guid>
		<description><![CDATA[در این مطلب به ایجاد چرخش افقی و یا همان filp horizontal با کمک گرفتن از کلاس Matrix می پردازیم و در این میان به توضیحی بر نحوه تعیین کردن مرکز چرخش یک شی به صورت پویا توسط کد اکشن اسکریپت ۳ نیز می پردازیم. دانلود سورس : flipHorizontal_cs4.zip ابتدا کلاس های مورد نیاز را [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/11/matrix_flip_h_as3_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این مطلب به ایجاد چرخش افقی و یا همان filp horizontal با کمک گرفتن از کلاس Matrix می پردازیم و در این میان به توضیحی بر نحوه تعیین کردن مرکز چرخش یک شی به صورت پویا توسط کد اکشن اسکریپت ۳ نیز می پردازیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1501"></span></p>
<blockquote><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">دانلود سورس : <a href="http://blog.iflashlord.com/wp-content/uploads/2011/11/flipHorizontal_cs4.zip" target="_blank">flipHorizontal_cs4.zip</a></p></blockquote>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">ابتدا کلاس های مورد نیاز را import می کنیم ، البته توجه داشته باشید در صورتی که کدها را در محیط های برنامه فلش و یا دیگر IDE های اکشن اسکریپت می نویسید در زمان نوشتن کد و در زمانی که توسط ( : ) نوع متغییر ها را مشخص می کنید به صورت خودکار کلاسه مورد نظر شما در ابتدای پروژه Import می شود و خط کد مربوطه به صورت خودکار در ابتدای پروژه شما قرار می گیرد. (البته توجه داشته باشید این امکان در نسخه های قدیمی برنامه های فوق الذکر وجود ندارد)</p>
<pre class="brush: as3; title: ; notranslate">
import flash.geom.Matrix;
import flash.geom.Point;
import flash.display.Graphics;
import flash.display.MovieClip;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">حال برای ایجاد چرخش و برای این که بتوانیم از آن برای اشیای متعدد استفاده کنیم ،آن را به صورت یک تابع ایجاد می کنیم و نام آن را filpHorizontal قرار می دهیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">آرگمان اصلی این تابع displayObject هست که شی مورد نظر شما را شامل می شود و آرگمان اختیاری بعدی که برای نمایش مرکز چرخش است که توسط کد ما به شی اعمال می شود در صورتی که این گزینه true باشد در مرکز چرخش شی ما یک دایره سیاه رنگ ایجاد می شود که نمایش دهنده مرکز چرخش کنونی است.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">همان طور که در کد مشخص است این دایره یک MovieClip هست که دایره ای با استفاده از فرامین graphics و استفاده از متد drawCircle در آن ایجاد شده است و به محل مربوطه به مرکز چرخش تغییر مختصات داده شده است و به شی اصلی ما addChild شده است.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">حال بهتر هست کمی در مورد Matrix ها توضیح داده شود تا با ذهنی باز تر به تحلیل کد بپردازیم:</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">یک ماتریس (matrix) دگرگونی شی یک ماتریس ۳ در ۳ با محتویات زیر می باشد.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1518" title="matrix_props1" src="http://blog.iflashlord.com/wp-content/uploads/2011/11/matrix_props1.jpg" alt="" width="150" height="105" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در ماتریس های دگرگونی u ، v و w خواص ارائه قابلیت های اضافی است. کلاس ماتریس (matrix) تنها در فضای دو بعدی عمل می کند ، بنابر این همواره فرض می شود خصوصیت u و v مقدار ۰.۰ و خصوصیت w مقدار ۱.۰ می باشد. در نتیجه ماتریس ما به صورت زیر است :</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1519" title="matrix_props2" src="http://blog.iflashlord.com/wp-content/uploads/2011/11/matrix_props2.jpg" alt="" width="150" height="105" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">شما می توانید ۶ خصوصیت دیگر را در ماتریس شی خود (a,b,c,d,tx,ty) را مقدار دهی کنید (set) و یا مقدار آن را دریافت کنید (get).</p>
<pre class="brush: as3; title: ; notranslate">
function flipHorizontal(displayObject:MovieClip , visiblePoint = true):void
{
	//دریافت متریکس کنونی شی و قرار دادن آن در یک متغیر
	var matrix:Matrix = displayObject.transform.matrix;

	trace(matrix.toString());//(a=1, b=0, c=0, d=1, tx=60.55, ty=207.5)
	//[ a  c  tx ]   =&gt;   [ 1  0  60.55 ]
	//| b  d  ty |   =&gt;   | 0  1  207.5 |
	//[ 0  0   1 ]   =&gt;   [ 0  0   1    ]

	//مشخص کردن محل مرکز به صورت پویا
	var pointX:Number = displayObject.width / 2;
	var pointY:Number = displayObject.height / 2;

	//شعاع دایره مشخص کننده مرکز
	var pointRadius:Number = 5;

	var dspWidthDivide:Point = new Point(pointX,pointY);
	matrix.transformPoint(dspWidthDivide);

	if (visiblePoint)
	{

		//ایجاد دایره مربوطه به نمایش مرکز
		var point:MovieClip = new MovieClip();
		point.graphics.beginFill(0x000000);
		point.graphics.drawCircle(0 , 0 , pointRadius);
		point.graphics.endFill();
		//مختصات دهی دایره با توجه به مرکز تعیین شده;
		point.x = pointX - (pointRadius / 2);
		point.y = pointY - (pointRadius / 2);
		//افزودن دایره به شی مربوطه
		displayObject.addChild(point);
	}

	if (matrix.a &gt; 0)
	{
		matrix.a = -1 * matrix.a;
		matrix.tx = displayObject.width + displayObject.x;
	}
	else
	{
		matrix.a = -1 * matrix.a;
		matrix.tx = displayObject.x - displayObject.width;
	}

	//اعمال ماتریکس جدید به شی مربوطه
	displayObject.transform.matrix = matrix;
}

//usuage
flipHorizontal(myMC1);
myMC1.rotation = 15;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">حال ما برای چرخش افقی از ترکیب ماتریس دَوران و انعکاس استفاده می کنیم ، ابتدا مقدار مربوطه به ماتریس شی را گرفته (displayObject.<strong>transform.matrix</strong>) و در یک متغیر قرار می دهیم و حال می توانید همان طور که در بالا گفته شد به مقدارهای مربوطه به این شی دسترسی داشته باشیم و آنها را تغییر دهیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در مرحله بعد در کد زیر ماتریس دریافت شده را trace می کنیم تا از دریافت درست داده ها اطمینان حاصل کنیم. در کد برای درک بیشتر به صورت ماتریس هم توضیح داده شده است.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در کد زیر در مرحله بعد دو متغیر برای مشخص کردن وسط شی با تقسیم عرض و طول شی بر ۲ ایجاد می کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در مرحله بعد شعاع مربوطه به دایره مجازی که مشخص کننده مرکز چرخش هست را مشخص می کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">سپس متغیر dspWidthDivide را که یک point است را ایجاد می کنیم و مقدارهای دو متغییر pointX و pointY را به عنوان آرگمان های آن وارد می کنیم ، حال می توانیم توسط این متغیر و متد matrix.<strong>transforPoint</strong> مرکز چرخش را به مختصات مورد نظرمان به صورت پویا تغییر دهیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در بخش بعدی کد ،اقدام به ایجاد شی دایره برای مرکز و مختصات دهی آن می کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در مرحله بعدی که <strong>مرحله اصلی</strong> می باشد ابتدا مقدار <strong>a</strong> شی خود را چک می کنیم در صورتی که بزرگتر از صفر باشد <strong>tx</strong> را برابر با <strong>عرض شی به اضافه مختصات x شی می کنیم</strong> و در غیر این صورت <strong>مختصات x شی را منهای عرض شی می کنیم</strong> و در هر دو حالت a<strong> را برابر با a*-1</strong> مقدار دهی می کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در آخر نیز به خصوصیت <strong>transform.matrix</strong> شی <strong>displayObject</strong> مان مقدار جدید متغیر matrix را اعمال می کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در پایان نیز برنامه را تست می کنیم ، myMC1 یک MovieClip هست که توسط تابع برای ایجاد چرخش افقی در آن انتخاب شده است و در آخر نیز برای متوجه شدن چرخش و مبنای چرخش توسط متد rotation چرخشی در شی ایجاد شده است تا با توجه به دایره مشکی متوجه چرخش بر مبنای مرکز چرخش شوید.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/08/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%da%86%d8%b1%d8%ae%d8%b4-%d8%a7%d9%81%d9%82%db%8c-%d8%a8%d8%a7-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-matrix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>مدیریت کلید Enter برای کنترل فیلد متنی</title>
		<link>http://blog.iflashlord.com/1390/08/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%da%a9%d9%84%db%8c%d8%af-enter-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d9%86%d8%aa%d8%b1%d9%84-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/</link>
		<comments>http://blog.iflashlord.com/1390/08/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%da%a9%d9%84%db%8c%d8%af-enter-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d9%86%d8%aa%d8%b1%d9%84-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 01:36:48 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[Enter]]></category>
		<category><![CDATA[flash.ui.Keyboard]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Keyboard.ENTER]]></category>
		<category><![CDATA[Keyboard.NUMPAD_ENTER]]></category>
		<category><![CDATA[KeyboardEvent]]></category>
		<category><![CDATA[KeyboardEvent.KEY_DOWN]]></category>
		<category><![CDATA[keyCode]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[اینتر]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[کیبورد]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1452</guid>
		<description><![CDATA[گاهی نیاز است که با فشردن کلید Enter بلافاصله بعد از تایپ متن در یک فیلد متنی، عملیات خاصی اجرا شود، اما با توجه به این که کلید Enter در فیلدهای متنی توسط Flash Player مدیریت می‌شود، استفاده از آن توسط KeyboardEvent در حالت عادی مقدور نمی‌باشد. در این مطلب نحوه مدیریت این کلید برای [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/10/enter_key_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">گاهی نیاز است که با فشردن کلید Enter بلافاصله بعد از تایپ متن در یک فیلد متنی، عملیات خاصی اجرا شود، اما با توجه به این که کلید Enter در فیلدهای متنی توسط Flash Player مدیریت می‌شود، استفاده از آن توسط KeyboardEvent در حالت عادی مقدور نمی‌باشد. در این مطلب نحوه مدیریت این کلید برای فیلدهای متنی آموزش داده می‌شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1452"></span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۱- یک پروژه Action Script 3.0 ایجاد کنید و به وسیله ابزار Text یک فیلد متنی ایجاد کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۲- حالا کلاسه‌های مورد نیاز را Import کنید.</p>
<pre class="brush: as3; title: ; notranslate">
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">3- در ادامه یک Listener برای فیلد متنی ایجاد کنید و مقدار useCapture را برای آن true در نظر بگیرید تا مدیریت کلیدها را در اختیار بگیرید. (به جای my_textField نام فیلد متنی مورد نظرتان را بنویسید)</p>
<pre class="brush: as3; title: ; notranslate">
my_textField.addEventListener(KeyboardEvent.KEY_DOWN, onEnterDown, true);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">4- در نهایت تابع onEnterDown را به صورت زیر تعریف کنید.</p>
<pre class="brush: as3; title: ; notranslate">
function onEnterDown(e:KeyboardEvent):void
{
	if (e.keyCode == Keyboard.ENTER || e.keyCode == Keyboard.NUMPAD_ENTER)
	{
		trace(&quot;Submit&quot;);
	}
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این تابع:</p>
<ul>
<li>به وسیله دستور if کلیدهای ENTER و NUMPAD_ENTER از سایر کلیدها متمایز می‌شود.</li>
<li>بعد از فشردن کلیدهای Enter دستور trace اجرا می‌شود.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/08/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%da%a9%d9%84%db%8c%d8%af-enter-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d9%86%d8%aa%d8%b1%d9%84-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>آپلود فایل به کمک Air و PHP بر روی Server</title>
		<link>http://blog.iflashlord.com/1390/08/%d8%a2%d9%be%d9%84%d9%88%d8%af-%d9%81%d8%a7%db%8c%d9%84-%d8%a8%d9%87-%da%a9%d9%85%da%a9-air-%d9%88-php-%d8%a8%d8%b1-%d8%b1%d9%88%db%8c-server/</link>
		<comments>http://blog.iflashlord.com/1390/08/%d8%a2%d9%be%d9%84%d9%88%d8%af-%d9%81%d8%a7%db%8c%d9%84-%d8%a8%d9%87-%da%a9%d9%85%da%a9-air-%d9%88-php-%d8%a8%d8%b1-%d8%b1%d9%88%db%8c-server/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 01:20:30 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی]]></category>
		<category><![CDATA[$_FILES]]></category>
		<category><![CDATA[$_POST]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[event.bytesLoaded]]></category>
		<category><![CDATA[event.bytesTotal]]></category>
		<category><![CDATA[fclose]]></category>
		<category><![CDATA[FileFilter]]></category>
		<category><![CDATA[FileReference]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[fopen]]></category>
		<category><![CDATA[fwrite]]></category>
		<category><![CDATA[move_uploaded_file]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ProgressEvent]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[uploader_script.php]]></category>
		<category><![CDATA[URLRequest]]></category>
		<category><![CDATA[URLRequestMethod]]></category>
		<category><![CDATA[URLRequestMethod.POST]]></category>
		<category><![CDATA[URLVariables]]></category>
		<category><![CDATA[آپلود]]></category>
		<category><![CDATA[آپلود فایل]]></category>
		<category><![CDATA[ایر]]></category>
		<category><![CDATA[فلش]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1394</guid>
		<description><![CDATA[در این مطلب نحوه برقراری ارتباط بین Air و PHP به منظور Upload فایل روی Server آموزش داده می‌شود. ابتدا یک فرم مخصوص آپلود می‌سازیم، سپس کدهای مربوط به PHP را نوشته و فایل‌های مورد نیاز را روی Server قرار می‌دهیم. در نهایت کدهای مربوط به نرم افزار را در Flash اضافه می‌کنیم. برای آپلود [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/10/php_upload_air_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این مطلب نحوه برقراری ارتباط بین Air و PHP به منظور Upload فایل روی Server آموزش داده می‌شود. ابتدا یک فرم مخصوص آپلود می‌سازیم، سپس کدهای مربوط به PHP را نوشته و فایل‌های مورد نیاز را روی Server قرار می‌دهیم. در نهایت کدهای مربوط به نرم افزار را در Flash اضافه می‌کنیم. برای آپلود فایل‌ها از FileReference، URLRequest و URLVariables استفاده می‌کنیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1394"></span></p>
<blockquote><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">دانلود سورس : <a href="http://flashcenter.ir/wp-content/uploads/2011/07/source1.zip">Source CS5.5.zip</a></p></blockquote>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">1- برای شروع یک پروژه جدید Air ایجاد کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۲- به کمک کامپوننت‌های Button , Text Input و به کمک ابزار Rectangle این فرم را بسازید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1395" title="upload_gui_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/10/upload_gui_iflashlord.jpg" alt="" width="346" height="158" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۳- یک برنامه Editor باز کنید و این کدها را در آن بنویسید، سپس فایل را با نام uploader_script.php ذخیره کنید.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php $todayDate = $_POST['todayDate'];
$Name = $_POST['Name'];
$Email = $_POST['Email'];
$filename = $_FILES['Filedata']['name'];
$filetmpname = $_FILES['Filedata']['tmp_name'];
$fileType = $_FILES[&quot;Filedata&quot;][&quot;type&quot;];
$fileSizeMB = ($_FILES[&quot;Filedata&quot;][&quot;size&quot;] / 1024 / 1000);
move_uploaded_file($_FILES['Filedata']['tmp_name'], &quot;images/&quot;.$filename);
$myFile = &quot;logFile.txt&quot;;
$fh = fopen($myFile, ‘a’) or die(&quot;can’t open file&quot;);
$stringData = “\n\ntodayDate: $todayDate \n Name: $Name \n Email: $Email \n ssid: $ssid \n FileName: $filename \n TmpName: $filetmpname \n Type: $fileType \n Size: $fileSizeMB MegaBytes”;
fwrite($fh, $stringData);
fclose($fh);
?&gt;
</pre>
<ul>
<li>در این کدها ابتدا اطلاعات با متد POST دریافت می‌شود.</li>
<li>سپس فایل‌های آپلود شده به داخل فولدر images که در کنار همین فایل PHP باید بسازیم منتقل می‌شوند و نام اصلی فایل برای آن حفظ می‌شود.</li>
<li>در ادامه اطلاعات مربوط به فایل در یک فایل متنی به نام logFile.txt ذخیره می‌شود.</li>
</ul>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۴- حالا فایل PHP را در Server خود آپلود کنید. در کنار این فایل یک فولدر به نام images و یک فایل متنی به نام logFile.txt ایجاد کنید و Permission آنها را ۷۷۷ قرار دهید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۵- پنل Actions را برای فریم اول پروژه فلش فعال کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۶- حالا باید کلاسه مورد نیاز را import کنید:</p>
<pre class="brush: as3; title: ; notranslate">
import flash.net.URLRequest;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">7- اطلاعات اولیه مربوط به دکمه‌ها و سایر قسمت‌هایی را که در فرم بالا قابل مشاهده هستند، به صورت زیر تعریف کنید:</p>
<pre class="brush: as3; title: ; notranslate">
upload_btn.enabled = false;
progressBar.width = 1;
uploadMsg.text = &quot;Select a File …&quot;;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۸- متغیر URLRequest را که به آدرس فایل PHP بر روی Server متصل می‌شود، به صورت زیر تعریف کنید:</p>
<pre class="brush: as3; title: ; notranslate">
var URLrequest:URLRequest = new URLRequest(&quot;uploader_script.php&quot;);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">9- در این آموزش در نظر داریم که کاربر فقط بتواند فایل عکس و متن را با برنامه آپلود کند، بنابراین فیلتر فایل‌ها را به صورت زیر تعریف می‌کنیم و هر دو نوع فیلتر را در یک آرایه قرار می‌دهیم:</p>
<pre class="brush: as3; title: ; notranslate">
var imageTypes:FileFilter = new FileFilter(&quot;Images (*.jpg, *.jpeg, *.gif, *.png)&quot;, &quot;*.jpg; *.jpeg; *.gif; *.png”);
var textTypes:FileFilter = new FileFilter(&quot;Text Files (*.txt, *.rtf)&quot;, &quot;*.txt; *.rtf&quot;);
var allTypes:Array = new Array(imageTypes, textTypes);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">10- یک FileReference جدید می‌سازیم و Event Listener‌های مربوط به انتخاب موفق فایل توسط کاربر، کامل شدن آپلود و حین پیشرفت آپلود را برای آن به صورت زیر تعریف می‌کنیم:</p>
<pre class="brush: as3; title: ; notranslate">
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, syncVariables);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">11- حالا Event Listener‌های مربوط به کلیک روی دکمه‌ها را تعریف کنید.</p>
<pre class="brush: as3; title: ; notranslate">
browse_btn.addEventListener(MouseEvent.CLICK, browseBox);
upload_btn.addEventListener(MouseEvent.CLICK, uploadVars);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">12- تابعی که بعد از کلیک روی دکمه Browse فراخوانی می‌شود، به صورت زیر تعریف می‌شود. بعد از کلیک روی این دکمه کاربر باید پنجره انتخاب فایل را با فیلترهایی که قبلا آماده شدند، ببیند.</p>
<pre class="brush: as3; title: ; notranslate">
function browseBox(event:MouseEvent):void
{
	fileRef.browse(allTypes);
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">13- تابعی که بعد از انتخاب موفق فایل توسط کاربر، فراخوانی می‌شود، به صورت زیر تعریف می‌شود. در این تابع ابتدا آدرس فایل در فیلد مربوطه نشان داده می‌شود. سپس دکمه آپلود فعال و ProgressBar آماده می‌شود، در ادامه اطلاعات مورد نیاز PHP به کمک URLVariables جمع آوری می‌شود و این اطلاعات توسط متد POST برای PHP آماده ارسال می‌شوند.</p>
<pre class="brush: as3; title: ; notranslate">
function syncVariables(event:Event):void
{
	fileDisplay_txt.text = &quot;&quot; + fileRef.name;
	upload_btn.enabled = true;
	progressBar.width = 1;
	var variables:URLVariables = new URLVariables();
	variables.todayDate = new Date();
	variables.Name = &quot;IFLashLord&quot;;
	variables.Email = &quot;test@gmail.com&quot;;
	URLrequest.method = URLRequestMethod.POST;
	URLrequest.data = variables;
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">14- حالا وقت آن رسیده است تابعی را تعریف کنیم که بعد از کلیک روی دکمه Upload فراخوانی می‌شود و اطلاعات را به PHP می‌فرستد. یکی از این اطلاعات، خود فایل انتخاب شده است که با دستور upload توسط FileReference ارسال می‌شود.</p>
<pre class="brush: as3; title: ; notranslate">
function uploadVars(event:MouseEvent):void
{
	uploadMsg.text = &quot;Uploading …&quot;;
	fileRef.upload(URLrequest);
	upload_btn.enabled = false;
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">15- توابع مربوط به کامل شدن و حین پیشرفت آپلود به صورت زیر تعریف می‌شوند.</p>
<pre class="brush: as3; title: ; notranslate">
function completeHandler(event:Event):void
{
	uploadMsg.text = fileRef.name + &quot; has been uploaded.&quot;;
	fileDisplay_txt.text = &quot;&quot;;
}

function progressHandler(event:ProgressEvent):void
{
	progressBar.width = Math.ceil(241 * (event.bytesLoaded / event.bytesTotal));
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در صورتی که نیاز داشتید می‌توانید این پروژه را به صورت swf و AS3 در کنار فایل PHP آپلود کنید. اما اگر قرار است این برنامه بر روی Desktop کار کند حتما باید از پروژه Air استفاده کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/08/%d8%a2%d9%be%d9%84%d9%88%d8%af-%d9%81%d8%a7%db%8c%d9%84-%d8%a8%d9%87-%da%a9%d9%85%da%a9-air-%d9%88-php-%d8%a8%d8%b1-%d8%b1%d9%88%db%8c-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>جستجوی به ترتیب یک لغت در فیلد متنی</title>
		<link>http://blog.iflashlord.com/1390/07/%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d8%a8%d9%87-%d8%aa%d8%b1%d8%aa%db%8c%d8%a8-%db%8c%da%a9-%d9%84%d8%ba%d8%aa-%d8%af%d8%b1-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/</link>
		<comments>http://blog.iflashlord.com/1390/07/%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d8%a8%d9%87-%d8%aa%d8%b1%d8%aa%db%8c%d8%a8-%db%8c%da%a9-%d9%84%d8%ba%d8%aa-%d8%af%d8%b1-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 01:11:03 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[alwaysShowSelection]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[CLICK]]></category>
		<category><![CDATA[Event Listener]]></category>
		<category><![CDATA[Find Next]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Focus]]></category>
		<category><![CDATA[indexOf]]></category>
		<category><![CDATA[MouseEvent]]></category>
		<category><![CDATA[setSelection]]></category>
		<category><![CDATA[اکشن 3]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[تابع]]></category>
		<category><![CDATA[جستجو]]></category>
		<category><![CDATA[جستجو در متن]]></category>
		<category><![CDATA[جستجوی به ترتیب]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[فیلد متنی]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1363</guid>
		<description><![CDATA[در این مطلب نحوه جستجوی به ترتیب (مشابه Find Next) یک لغت در یک فیلد متنی و انتخاب این لغت آموزش داده می‌شود، به طوری که بعد از هر بار کلیک روی دکمه مربوط به Find Next لغت مورد نظر بعدی انتخاب می‌شود. ۱- ابتدا یک دکمه به نام find_next_btn، یک فیلد متنی به نام target_txt به [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/10/search_text_find_next_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این مطلب نحوه جستجوی به ترتیب (مشابه Find Next) یک لغت در یک فیلد متنی و انتخاب این لغت آموزش داده می‌شود، به طوری که بعد از هر بار کلیک روی دکمه مربوط به Find Next لغت مورد نظر بعدی انتخاب می‌شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1363"></span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۱- ابتدا یک دکمه به نام find_next_btn، یک فیلد متنی به نام target_txt به عنوان فیلد متنی اصلی و یک فیلد متنی برای نوشتن کلمه مورد نظر جستجو به نام search_txt بسازید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="alignnone size-full wp-image-1364" title="findnext_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/10/findnext_iflashlord.png" alt="" width="408" height="263" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۲- ابتدا یک متغیر برای پیدا کردن اندیس بعدی و یک Event Listener برای دکمه Find Next می‌سازیم.</p>
<pre class="brush: as3; title: ; notranslate">
var i:Number = 0;
find_next_btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">3- حالا تابعی را که بعد از کلیک روی دکمه فراخوانی می‌شود، تعریف می‌کنیم.</p>
<pre class="brush: as3; title: ; notranslate">
function fl_MouseClickHandler(event:MouseEvent):void
{
	target_txt.alwaysShowSelection = true;
	i = target_txt.text.indexOf(search_txt.text,i) + search_txt.length;
	target_txt.setSelection(i - search_txt.length, i);
	if (target_txt.text.indexOf(search_txt.text,i) &lt; 0)
	{
		i = 0;
	}
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>در این تابع:</strong></p>
<ul>
<li>ابتدا با دستور alwaysShowSelection وضعیت نمایش ناحیه انتخاب شده را به صورت همیشه فعال تبدیل می‌کنیم تا حتی زمانی که Focus روی سایر اشیاست هم ناحیه انتخاب شده دیده شود.</li>
<li>مقدار i را برای پیدا کردن لغت بعدی آماده می‌کنیم. برای این کار طول رشته لغت مورد نظر را به اندیس پیدا شده اضافه می‌کنیم.</li>
<li>لغت مورد نظر را به کمک دستور setSelection روی target_txt نشان می‌دهیم.</li>
<li>در صورتی که اندیس آخرین لغت هم پیدا شد، به کمک دستور if جستجو را از ابتدا شروع می‌کنیم. در این دستور فرض شده است که بعد از آخرین لغت پیدا شده، مقدار ۱- برای دستور indexOf برگردانده شود.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/07/%d8%ac%d8%b3%d8%aa%d8%ac%d9%88%db%8c-%d8%a8%d9%87-%d8%aa%d8%b1%d8%aa%db%8c%d8%a8-%db%8c%da%a9-%d9%84%d8%ba%d8%aa-%d8%af%d8%b1-%d9%81%db%8c%d9%84%d8%af-%d9%85%d8%aa%d9%86%db%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>شناسایی محدوده‌های در دسترس مانیتور با کلاسه Screen</title>
		<link>http://blog.iflashlord.com/1390/07/%d8%b4%d9%86%d8%a7%d8%b3%d8%a7%db%8c%db%8c-%d9%85%d8%ad%d8%af%d9%88%d8%af%d9%87%e2%80%8c%d9%87%d8%a7%db%8c-%d8%af%d8%b1-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3-%d9%85%d8%a7%d9%86%db%8c%d8%aa%d9%88%d8%b1/</link>
		<comments>http://blog.iflashlord.com/1390/07/%d8%b4%d9%86%d8%a7%d8%b3%d8%a7%db%8c%db%8c-%d9%85%d8%ad%d8%af%d9%88%d8%af%d9%87%e2%80%8c%d9%87%d8%a7%db%8c-%d8%af%d8%b1-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3-%d9%85%d8%a7%d9%86%db%8c%d8%aa%d9%88%d8%b1/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 02:31:49 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[Actions]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[bounds]]></category>
		<category><![CDATA[Dock]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash.display.Screen]]></category>
		<category><![CDATA[flash.events.Event]]></category>
		<category><![CDATA[Screen]]></category>
		<category><![CDATA[screen.bounds.right]]></category>
		<category><![CDATA[screen.visibleBounds.right]]></category>
		<category><![CDATA[Taskbar]]></category>
		<category><![CDATA[visibleBounds]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[ایر]]></category>
		<category><![CDATA[رزولوشن]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[محدوده در دسترس]]></category>
		<category><![CDATA[محدوده رزولوشن]]></category>
		<category><![CDATA[گوشه‌های مانیتور]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1338</guid>
		<description><![CDATA[شاید تا به حال نیاز داشتید که یک پنجره را در گوشه‌های مانیتور به صورت Dock قرار دهید به طوری که نوار Taskbar در ویندوز برای شما مزاحمت ایجاد نکند. در این درس نحوه شناسایی محدوده‌های در دسترس مانیتور با کلاسه Screen آموزش داده می‌شود که می‌توانید در پروژه‌های Air از آن استفاده کنید. دانلود [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/10/screen_bounds_air_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">شاید تا به حال نیاز داشتید که یک پنجره را در گوشه‌های مانیتور به صورت Dock قرار دهید به طوری که نوار Taskbar در ویندوز برای شما مزاحمت ایجاد نکند. در این درس نحوه شناسایی محدوده‌های در دسترس مانیتور با کلاسه Screen آموزش داده می‌شود که می‌توانید در پروژه‌های Air از آن استفاده کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1338"></span></p>
<blockquote><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">دانلود سورس : <a href="http://blog.iflashlord.com/wp-content/uploads/2011/10/source1.zip" target="_blank">source.zip</a></p></blockquote>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۱- برنامه فلش را اجرا و یک پروژه Air ایجاد کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۲- پنل Actions را باز کنید و کلاسه‌های مورد نیاز را Import کنید.</p>
<pre class="brush: as3; title: ; notranslate">
import flash.display.Screen;
import flash.events.Event;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۳- به وسیله کلاسه Screen می‌توانید رزولوشن مانیتور و محدوده‌های در دسترس را مشخص کنید. تفاوت رزولوشن و محدوده در دسترس در شکل زیر آمده است.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><img class="size-full wp-image-1347 aligncenter" title="visiblebounds_bounds_iflashlord" src="http://blog.iflashlord.com/wp-content/uploads/2011/10/visiblebounds_bounds_iflashlord.jpg" alt="" width="400" height="327" /></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۴- حالا یک متغیر از نوع Screen ایجاد کنید. با توجه به این که برخی از کاربران از دو یا چند مانیتور استفاده می‌کنند یکی از ویژگی‌های کلاسه Screen این است که می‌توانید مانیتور مورد نظر خود را انتخاب کنید. در صورتی که هدف انتخاب مانیتور اصلی باشد می‌توانید از کد Screen.mainScreen که در زیر آمده است، استفاده کنید.</p>
<pre class="brush: as3; title: ; notranslate">
var screen:Screen = Screen.mainScreen;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۵- درصورتیکه نیاز داشتید از سایر مانیتورها استفاده کنید، این کد را به جای کد قبل قرار دهید. توجه کنید که داخل براکت باید اندیس مانیتور را قرار دهید که اندیس صفر برای مانیتور اصلی است.</p>
<pre class="brush: as3; title: ; notranslate">
var screen:Screen = Screen.screens[1];
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۶- برای استفاده از متغیر screen می‌توانید از کد‌های زیر استفاده کنید.</p>
<pre class="brush: as3; title: ; notranslate">
// گوشه راست رزولوشن:
screen.bounds.right;

// گوشه راست دردسترس:
screen.visibleBounds.right;

// گوشه چپ رزولوشن:
screen.bounds.left;

// گوشه چپ در دسترس:
screen.visibleBounds.left;

// گوشه بالای رزولوشن:
screen.bounds.top;

// گوشه بالای دردسترس:
screen.visibleBounds.top;

// گوشه پایین رزولوشن:
screen.bounds.bottom;

// گوشه پایین در دسترس:
screen.visibleBounds.bottom;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">۷- برای پیدا کردن طول و عرض رزولوشن و محدوده دردسترس هم می‌توانید از کدهای زیر استفاده کنید.</p>
<pre class="brush: as3; title: ; notranslate">
// طول و عرض رزولوشن:
screen.bounds.width;
screen.bounds.height;

// طول و عرض دردسترس:
screen.visibleBounds.width;
screen.visibleBounds.height;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">برای مشاهده استفاده کاربردی از این کلاسه فایل <a href="http://blog.iflashlord.com/wp-content/uploads/2011/10/source1.zip" target="_blank">source.zip</a> را دانلود کنید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><a href="http://flashcenter.ir/?p=298" target="_blank">+ منبع</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/07/%d8%b4%d9%86%d8%a7%d8%b3%d8%a7%db%8c%db%8c-%d9%85%d8%ad%d8%af%d9%88%d8%af%d9%87%e2%80%8c%d9%87%d8%a7%db%8c-%d8%af%d8%b1-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3-%d9%85%d8%a7%d9%86%db%8c%d8%aa%d9%88%d8%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>بهینه سازی فلش &#8211; انجماد اشیاء</title>
		<link>http://blog.iflashlord.com/1390/05/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d9%86%d8%ac%d9%85%d8%a7%d8%af-%d8%a7%d8%b4%db%8c%d8%a7%d8%a1/</link>
		<comments>http://blog.iflashlord.com/1390/05/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d9%86%d8%ac%d9%85%d8%a7%d8%af-%d8%a7%d8%b4%db%8c%d8%a7%d8%a1/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 08:22:35 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[addChild]]></category>
		<category><![CDATA[ADDED_TO_STAGE]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[contains]]></category>
		<category><![CDATA[CPU-intensive]]></category>
		<category><![CDATA[currentTarget]]></category>
		<category><![CDATA[Dictionary]]></category>
		<category><![CDATA[Event.ENTER_FRAME]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[for each]]></category>
		<category><![CDATA[Freezing]]></category>
		<category><![CDATA[Keyboard.LEFT]]></category>
		<category><![CDATA[Keyboard.RIGHT]]></category>
		<category><![CDATA[KeyboardEvent]]></category>
		<category><![CDATA[keyCode]]></category>
		<category><![CDATA[MouseEvent]]></category>
		<category><![CDATA[MouseEvent.CLICK]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[removeChild]]></category>
		<category><![CDATA[REMOVED_FROM_STAGE]]></category>
		<category><![CDATA[Unfreezing]]></category>
		<category><![CDATA[اشیاء]]></category>
		<category><![CDATA[انجماد]]></category>
		<category><![CDATA[بهینه سازی فلش]]></category>
		<category><![CDATA[فلش]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=952</guid>
		<description><![CDATA[بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/04/optimaize_flash_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="text-align: right;">بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که کارایی بهتری دارند پیش گام باشیم و همواره بهترین و بهینه ترین روش را استفاده کنیم. در این مجموعه آموزشی بهینه سازی فلش به نکات مهم برای مدیریت بر عناصر و حافظه ها … می پردازیم و تلاش می کنیم که بتوانیم با استفاده از نکات ارائه شده خروجی بهینه تر و سبک تری از پروژه فلش خود داشته باشیم.</p>
<p style="text-align: right;"><strong>بخش هفتم &#8211; انجماد (ثابت کردن) اشیاء و آزاد کردن اشیاء</strong></p>
<p title="بهینه سازی فلش – آزاد سازی حافظه"><strong></strong>برای بهینه سازی کد خود ، سعی کنید همیشه ازثابت کردن (Freeze) و آزاد کردن (Unfreeze) اشیاء استفاده کنید. این موارد برای همه اشیاء مهم هستند ، اما به صورت ویژه برای Display Object ها مهم هستند. حتی اگر شی نمایشی (<a title="بهینه سازی فلش – Display Objects" href="http://blog.iflashlord.com/1390/01/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-display-objects/">Display Object</a>) مدت زیادی در لیست نمایشی (<a title="Display List و اکشن اسکریپت ۳" href="http://blog.iflashlord.com/1388/09/display-list-%d9%88-%d8%a7%da%a9%d8%b4%d9%86-%d8%a7%d8%b3%da%a9%d8%b1%db%8c%d9%be%d8%aa-3/">Display List</a>) نباشد و در انتظار <a title="بهینه سازی فلش – آزاد سازی حافظه" href="http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a2%d8%b2%d8%a7%d8%af-%d8%b3%d8%a7%d8%b2%db%8c-%d8%ad%d8%a7%d9%81%d8%b8%d9%87/">جمع آوری زباله (</a><a title="بهینه سازی فلش – آزاد سازی حافظه" href="http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a2%d8%b2%d8%a7%d8%af-%d8%b3%d8%a7%d8%b2%db%8c-%d8%ad%d8%a7%d9%81%d8%b8%d9%87/">Garbage collection</a><a title="بهینه سازی فلش – آزاد سازی حافظه" href="http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a2%d8%b2%d8%a7%d8%af-%d8%b3%d8%a7%d8%b2%db%8c-%d8%ad%d8%a7%d9%81%d8%b8%d9%87/">)</a> باشد ، <strong>این اشیاء می توانند هنوز حافظه و  CPU را درگیر خود کنند.</strong></p>
<p style="text-align: right;"><span id="more-952"></span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">برای مثال ، ما می توانید با استفاده از Event.ENTER_FRAME رویدادی کیبورد را کنترل کنید ، در نتیجه شما امکان freeze کردن و unfreeze کردن را با رویداد های Event.REMOVE_FROM_STAGE و Event.ADDED_TO_STAGE در اختیار دارید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">مثال زیر نمونه این کار را در قالب Movie Clip ی که در حال پخش در stage هست و با کنترلر کیبورد در تعامل می باشد ، را مشاهده می کنید :</p>
<pre class="brush: as3; title: ; notranslate">

// تعریف رویداد های کیبورد

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown);

stage.addEventListener(KeyboardEvent.KEY_UP, keyIsUp);

// ساخت یک شی برای ذخیره کردن کلید تعیین شده

var keys:Dictionary = new Dictionary(true);

function keyIsDown(e:KeyboardEvent):void
{

	// به یاد داشتن کلیدی که فشرده شده است

	keys[e.keyCode] = true;

	if (e.keyCode == Keyboard.LEFT || e.keyCode == Keyboard.RIGHT)
	{

		runningBoy.play();

	}

}

function keyIsUp(e:KeyboardEvent):void
{

	// به یاد داشتن کلیدی که بعد از فشرده شدن رها شده است

	keys[e.keyCode] = false;

	for each (var value:Boolean in keys)
	{

		if (value)
		{
			return;
		}
	}

	runningBoy.stop();

}

runningBoy.addEventListener(Event.ENTER_FRAME, handleMovement);

runningBoy.stop();

var currentState:Number = runningBoy.scaleX;

var speed:Number = 15;

function handleMovement(e:Event):void
{

	if (keys[Keyboard.RIGHT])
	{

		e.currentTarget.x +=  speed;

		e.currentTarget.scaleX = currentState;

	}
	else if (keys[Keyboard.LEFT])
	{

		e.currentTarget.x -=  speed;

		e.currentTarget.scaleX =  -  currentState;

	}

}
</pre>
<p style="text-align: right;">زمانی که روی دکمه مربوطه به حذف با نام  removeBtn کلیک شود ، Movie Clip از لیست نمایش (Display List) حذف می شود:</p>
<pre class="brush: as3; title: ; notranslate">

// نمایش یا حذف مووی کلیپ توسط رویداد های دکمه های مربوطه

showBtn.addEventListener(MouseEvent.CLICK,showIt);

removeBtn.addEventListener(MouseEvent.CLICK,removeIt);

function showIt(e:MouseEvent):void
{

	addChild(runningBoy);

}

function removeIt(e:MouseEvent):void
{

	// حذف مووی کلیپ در صورتی موجود بودن

	if (contains(runningBoy))
	{
		removeChild(runningBoy);
	}

}
</pre>
<p style="text-align: right;">زمانی که Movie Clip از لیست نمایش حذف می شود ، Movie Clip هنوز رویداد Event.ENTER_FRAME را ارسال می کند. Movie Clip اجرا می شود ولی رندر (Render) نمی شود. برای ایجاد دستگیره به این وضعیت به صورت درست ، می بایست رویداد های دیگری را برای حذف تعریف کنیم ، برای پیش گیری از فشاری که این مساله به CPU وارد می آورد :</p>
<pre class="brush: as3; title: ; notranslate">

// Listen to Event.ADDED_TO_STAGE and Event.REMOVED_FROM_STAGE

runningBoy.addEventListener(Event.ADDED_TO_STAGE,activate);

runningBoy.addEventListener(Event.REMOVED_FROM_STAGE,deactivate);

function activate(e:Event):void
{

	// باز نشانی همه چیز

	e.currentTarget.addEventListener(Event.ENTER_FRAME,handleMovement);

}

function deactivate(e:Event):void
{

	//فریز کردین مووی کلیپ برای داشتن کمترین مصرف از سی پی یو در حالتی که مووی کلیپ حذف شده است

	e.currentTarget.removeEventListener(Event.ENTER_FRAME,handleMovement);

	e.currentTarget.stop();

}
</pre>
<p style="text-align: right;">زمانی که دوباره روی دکمه showBtn کلیک می شود ، Movie Clip باز نشانی می شود و رویداد Event.ENTER_FRAME دوباره به آن داده می شود ، و کیبورد به صورت درست باز هم امکان کنترل Movie Clip را دارد.</p>
<blockquote>
<p style="text-align: right;">نکته : اگر شی نمایشی از لیست نمایش حذف شده است ،به مرجع آن مقدار null (تهی) بدهید تا اطمینان داشته باشید که شی freeze شده است. اگر جمع آورنده زباله (garbage collector) اجرا نشود ، شی همچنان به مصرف حافظه و پردازش CPU ادامه می دهد، حتی اگر شی نمایش داده نشود.</p>
</blockquote>
<p style="text-align: right;"><strong>برای اطمینان از این که شی کمترین مصرف حافظه و پردازش CPU را دارد ، می بایست زمانی که شی از لیست نمایش حذف می شود ، کاملا freeze شده باشد.</strong></p>
<blockquote>
<p style="text-align: right;">از نسخه ۱۰ فلش پلیر ، در صورتی که پخش کننده اصلی در فریم ها به فریم خالی برسد ، شی نمایشی به صورت خودکار freeze می شود، حتی اگر شما هیچ کاری برای انجماد (freeze) کردن اشیاء انجام ندهید.</p>
</blockquote>
<p style="text-align: right;">مفهوم انجماد در هنگام بارگزاری از دور(یا خارج) توسط کلاس <a title="بهینه سازی فلش – unloadAndStop در فلش پلیر ۱۰" href="http://blog.iflashlord.com/1390/03/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-unloadandstop-in-flash-player-10/">Loader </a>نیز مهم می باشد. زمانی که از کلاس Loader توسط فلش پلیر ۹ استفاده می کنید ، نیاز هست که به صورت دستی محتوا را در زمانی که رویداد Event.UNLOAD توسط شی LoaderInfo ارسال می شود freeze کنید. هر شی ی می بایست به صورت دستی freeze شود ، که کار سخت و بیهوده می باشد.</p>
<p style="text-align: right;"><strong>فلش پلیر ۱۰</strong> متدی جدیدی برای کلاس Loader با نام <a title="بهینه سازی فلش – unloadAndStop در فلش پلیر ۱۰" href="http://blog.iflashlord.com/1390/03/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-unloadandstop-in-flash-player-10/">unloadAndStop() </a>معرفی کرده است. که این متد به شما این امکان را می دهد که فایل swf در زمان unload به صورت خودکار تمامی اشیاء بارگزاری شده را  freeze کند و فلش پلیر را مجبور به اجرای جمع آورنده زباله (<a title="بهینه سازی فلش – آزاد سازی حافظه" href="http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a2%d8%b2%d8%a7%d8%af-%d8%b3%d8%a7%d8%b2%db%8c-%d8%ad%d8%a7%d9%81%d8%b8%d9%87/">garbage collection</a>) بعد از عمل freeze کند.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>در کد زیر یک فایل SWF توسط متد unload() بعد از بارگزاری شدن unload می شود ، که نیاز به پردازش بیشتر و freeze دستی دارد :</strong></p>
<pre class="brush: as3; title: ; notranslate">

var loader:Loader = new Loader();

loader.load( new URLRequest ( &quot;content.swf&quot; ) );

addChild( loader );

stage.addEventListener( MouseEvent.CLICK, unloadSWF );

function unloadSWF( e:MouseEvent ):void
{

	// Unload the SWF file with no automatic object deactivation

	// All deactivation must be processed manually

	loader.unload();

}
</pre>
<p style="text-align: right;"><strong>بهترین راه استفاده از متد unloadAndStop() ، که یک دستگیره بومی برای اجبار جمع آوری زباله در روند اجرا ایجاد می کند ، می باشد:</strong></p>
<pre class="brush: as3; title: ; notranslate">

var loader:Loader = new Loader();

loader.load( new URLRequest ( &quot;content.swf&quot; ) );

addChild( loader );

stage.addEventListener( MouseEvent.CLICK, unloadSWF );

function unloadSWF( e:MouseEvent ):void
{

	// Unload the SWF file with automatic object deactivation

	// All deactivation is handled automatically

	loader.unloadAndStop();

}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>در زیر به فهرستی از مواردی که unloadAndStop آنها را برای فایل های swf بارگزاری شده آماده می کند را مشاهده می کنید :</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>*</strong> ایست کردن تمامی MovieClip ها<br />
<strong>*</strong> ایست کردن تمامی صداهای در حال پخش و Stream (پخش در جریان)<br />
<strong>*</strong> ایست و حذف همه تایمر (Timer) های استفاده شده<br />
<strong>*</strong> حذف همه شنونده های رویداد عمومی ، برای enterFrame , exitFrame , frameconstructed , activeate , deactivate<br />
<strong>*</strong> حدف همه شنونده های مربوطه به  stage که توسط فرزند (child) ایجاده شده است<br />
<strong>* </strong>بستن همه NetConnection ها و NetStream ها (Video.attachNetStream/attachCamera(0) – Microphone.setLoopback(0))<br />
<strong>*</strong> حدف فونت های AS3 از جدول فونت های عمومی<br />
<strong>*</strong> ایست ؛ socket ها ، xmlsocket ها ،دانلودهای filerefrence ، و دیگر اشاء مربوطه به دانلود (grandchildren (سطح نوه والد) ) و…<br />
<strong>* </strong>آزاد کردن bitmap های در ارتباط با cacheAsBitmap و filterها و…</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">&nbsp;</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">موفق و پیروز باشید.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/05/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d9%86%d8%ac%d9%85%d8%a7%d8%af-%d8%a7%d8%b4%db%8c%d8%a7%d8%a1/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>بهینه سازی فلش &#8211; unloadAndStop در فلش پلیر ۱۰</title>
		<link>http://blog.iflashlord.com/1390/03/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-unloadandstop-in-flash-player-10/</link>
		<comments>http://blog.iflashlord.com/1390/03/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-unloadandstop-in-flash-player-10/#comments</comments>
		<pubDate>Tue, 31 May 2011 21:00:28 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[activeate]]></category>
		<category><![CDATA[addChild]]></category>
		<category><![CDATA[addEventListener]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[bitmap]]></category>
		<category><![CDATA[cacheAsBitmap]]></category>
		<category><![CDATA[Deactivate]]></category>
		<category><![CDATA[enterFrame]]></category>
		<category><![CDATA[exitFrame]]></category>
		<category><![CDATA[FileRefrence]]></category>
		<category><![CDATA[frameconstructed]]></category>
		<category><![CDATA[garbage collector]]></category>
		<category><![CDATA[grandchildren]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[loader.load]]></category>
		<category><![CDATA[loader.unloadAndStop]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[MouseEvent.CLICK]]></category>
		<category><![CDATA[MovieClip]]></category>
		<category><![CDATA[nested]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[Stream]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[Timer]]></category>
		<category><![CDATA[unloadAndStop]]></category>
		<category><![CDATA[unloadSWF]]></category>
		<category><![CDATA[URLRequest]]></category>
		<category><![CDATA[xmlsocket]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[بهینه سازی فلش]]></category>
		<category><![CDATA[جمع آورنده زباله]]></category>
		<category><![CDATA[جمع آوری زباله]]></category>
		<category><![CDATA[فلش]]></category>
		<category><![CDATA[فلش پلیر]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=1115</guid>
		<description><![CDATA[بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/04/optimaize_flash_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن       برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و      به  عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ،     ما   وظیفه داریم در ساخت عناصر فلش که کارایی بهتری دارند پیش گام  باشیم  و     همواره بهترین و بهینه ترین روش را استفاده کنیم. در این  مجموعه  آموزشی     بهینه سازی فلش به نکات مهم برای مدیریت بر عناصر و  حافظه ها …  می   پردازیم و   تلاش می کنیم که بتوانیم با استفاده از نکات  ارائه شده  خروجی   بهینه تر و   سبک تری از پروژه فلش خود داشته باشیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>بخش ششم &#8211; unloadAndStop در فلش پلیر ۱۰</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">متد unloadAndStop در پاسخ به چالش های پیش روی توسعه دهندگان اکشن اسکریپت برای توقف محتوای swf بارگزاری شده و حذف آن از حافظه (Memory) ، به اکشن اسکریپت در فلش پلیر ۱۰ افزوده شد.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">البته این مورد افزوده شده را نمی توان مانند گلوله ای جادویی برای حل همه مشکلاتی که در این زمینه وجود دارد دانست! ، برای روشن شدن بیشتر توضیح می دهیم که این مورد چه کاری انجام می دهد ، در مرحله اول این متد تلاش می کند محتوای بارگزاری شده را برای جمع آوری آماده کند ، و در مرحله بعد به جمع آورنده زباله (Garbage Collector) که می بایست عملیات جمع آوری زباله را انجام دهد ارجاع می شود. شما می توانید از مرحله دوم (که همان جمع آوری زباله gc می باشد)  با دادن مقدار false به عنوان آرگمان اول متد ، جلوگیری به عمل آورید.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span id="more-1115"></span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">با استفاده از این متد دریافت فایل swf باقی مانده در حافظه ساده می باشد ، اما انجام این کار به صورت تصادفی خیلی دشوار تر می باشد.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>در زیر به فهرستی از مواردی که unloadAndStop آنها را برای فایل های swf بارگزاری شده آماده می کند را مشاهده می کنید :</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>*</strong> ایست کردن تمامی MovieClip ها<br />
<strong>*</strong> ایست کردن تمامی صداهای در حال پخش و Stream (پخش در جریان)<br />
<strong>*</strong> ایست و حذف همه تایمر (Timer) های استفاده شده<br />
<strong>*</strong> حذف همه شنونده های رویداد عمومی ، برای enterFrame , exitFrame , frameconstructed , activeate , deactivate<br />
<strong>*</strong> حدف همه شنونده های مربوطه به  stage که توسط فرزند (child) ایجاده شده است<br />
<strong>* </strong>بستن همه NetConnection ها و NetStream ها (Video.attachNetStream/attachCamera(0) &#8211; Microphone.setLoopback(0))<br />
<strong>*</strong> حدف فونت های AS3 از جدول فونت های عمومی<br />
<strong>*</strong> ایست ؛ socket ها ، xmlsocket ها ،دانلودهای filerefrence ، و دیگر اشاء مربوطه به دانلود (grandchildren (سطح نوه والد) ) و&#8230;<br />
<strong>* </strong>آزاد کردن bitmap های در ارتباط با cacheAsBitmap و filterها و&#8230;</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>تذکر : </strong>تمامی موارد بالا به صورت بازگشتی اجرا می شوند ، به طوری که این موارد به هر یک از فرزندان تو در تو (nested) و فایل های swf بارگزاری شده در آن ها ، نیز اعمال می شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>حال به مثالی در این زمینه می پردازیم :</strong></p>
<pre class="brush: as3; title: ; notranslate">

var loader:Loader = new Loader();

loader.load( new URLRequest ( &quot;sample_content.swf&quot; ) );

addChild( loader );

stage.addEventListener( MouseEvent.CLICK, unloadSWF );

function unloadSWF( e:MouseEvent ):void
{
	//unloadAndStop استفاده از متد
	loader.unloadAndStop();
}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در کد بالا ابتدا یک شی Loader ساخته می شود و فایل نمونه آزمایشی ما را با نام sample_content.swf را بارگزاری می کند و سپس شی به DisplayObject افزوده (addChild) می شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در مرحله بعد با رویدادی که برای کلیک موس در stage در این مثال ایجاد می کنیم در زمان کلیک تابع unloadSWF را فراخوانی می کنیم</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این تابع با استفاده از متد unloadAndStop عمل unload را انجام می دهیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">موفق و پیروز باشید.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/03/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-unloadandstop-in-flash-player-10/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>بهینه سازی فلش &#8211; استفاده دوباره از Object ها</title>
		<link>http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%af%d9%88%d8%a8%d8%a7%d8%b1%d9%87-%d8%a7%d8%b2-object-%d9%87%d8%a7/</link>
		<comments>http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%af%d9%88%d8%a8%d8%a7%d8%b1%d9%87-%d8%a7%d8%b2-object-%d9%87%d8%a7/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 23:17:12 +0000</pubDate>
		<dc:creator>بهروز پولادرگ</dc:creator>
				<category><![CDATA[ادوبی ایر]]></category>
		<category><![CDATA[ادوبی فلش]]></category>
		<category><![CDATA[اکشن اسکریپت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[addChild]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[bitmap]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Math.random()]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[Number]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[Rectangle]]></category>
		<category><![CDATA[stageHeight]]></category>
		<category><![CDATA[stageWidth]]></category>
		<category><![CDATA[System.totalMemory]]></category>
		<category><![CDATA[toFixed]]></category>
		<category><![CDATA[trace]]></category>
		<category><![CDATA[آموزش اکشن اسکریپت 3.0]]></category>
		<category><![CDATA[اکشن اسکریپت 3]]></category>
		<category><![CDATA[بهینه سازی]]></category>
		<category><![CDATA[حافظه]]></category>
		<category><![CDATA[فلش]]></category>

		<guid isPermaLink="false">http://blog.iflashlord.com/?p=947</guid>
		<description><![CDATA[بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که [...]]]></description>
			<content:encoded><![CDATA[<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">
	<img src="http://blog.iflashlord.com/wp-content/uploads/2011/04/optimaize_flash_iflashlord.jpg" alt="iflashlord.com" />
	</p><p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن  برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به  عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما  وظیفه داریم در ساخت عناصر فلش که کارایی بهتری دارند پیش گام باشیم و  همواره بهترین و بهینه ترین روش را استفاده کنیم. در این مجموعه آموزشی  بهینه سازی فلش به نکات مهم برای مدیریت بر عناصر و حافظه ها … می پردازیم و  تلاش می کنیم که بتوانیم با استفاده از نکات ارائه شده خروجی بهینه تر و  سبک تری از پروژه فلش خود داشته باشیم.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>بخش دوم &#8211; استفاده دوباره از Object ها</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">راه دیگر برای بهینه سازی حافظه (memory) استفاده دوباره از اشیاء و اجتناب از ساختن دوباره و استفاده از آنها در هر زمان ممکن ، می باشد. می بایست تا جایی که می شود از ساختن دوباره object ها برای استفاده اجتناب نمود.<strong> </strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong><span id="more-947"></span><br />
</strong></p>
<pre class="brush: as3; highlight: [21]; title: ; notranslate">
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;

const MAX_NUM:int = 18;

const LINE_WIDTH:int = 30;
const LINE_HEIGHT:int = 400;

const COLOR:uint = 0xCCCCCC;

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,COLOR);//200 , 200 , true);
var myBitmap:Bitmap;

var area:Rectangle;
for (var i:int = 0; i &lt; MAX_NUM; i++)
{

	//نمونه روش غلط - از کد زیر استفاده نکنید

	area = new Rectangle(i*LINE_WIDTH,0,LINE_WIDTH,LINE_HEIGHT);

	myBitmapData.fillRect(area,Math.random()*COLOR);
	myBitmap = new Bitmap(myBitmapData);
	addChild(myBitmap);

}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">بازسازی شی Rectangle در هر تکرار حلقه مقدار بیشتری حافظه را استفاده می کند و اجرا را کند تر می کند ، زیرا شی جدید ساخته می شود.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>به روشی که در کد زیر استفاده شده است دقت کنید :</strong></p>
<pre class="brush: as3; highlight: [16]; title: ; notranslate">
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;

const MAX_NUM:int = 18;

const LINE_WIDTH:int = 30;
const LINE_HEIGHT:int = 400;

const COLOR:uint = 0xCCCCCC;

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,COLOR);
var myBitmap:Bitmap;

// ساخت شی خارج از حلقه
var area:Rectangle = new Rectangle(0,0,LINE_WIDTH,LINE_HEIGHT);

for (var i:int = 0; i &lt; MAX_NUM; i++)
{

	//تغییر مختصات به صورت مجزا
	area.x = i * LINE_WIDTH;

	myBitmapData.fillRect(area,Math.random()*COLOR);

}

myBitmap = new Bitmap(myBitmapData);
addChild(myBitmap);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">همان طور که مشاهده می کنید این کد هم همان خروجی و نتیجه مورد اول را دارد ولی بهینه سازی در آن انجام شده و حافظه کمتری را اشغال می کند.</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><span style="color: #ffffff;">-</span></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">مثال قبلی شی مربوطه ، تاثیر نسبتا کمی در استفاده از حافظه داشت ، در مثال بعدی با استفاده از شی BitmapData  تعداد زیادی مربع توسط یک حلقه ایجاد می شود</p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>کد زیر مربع هایی را به حالت موزاییک به صفحه اضافه می کند :<br />
</strong></p>
<pre class="brush: as3; title: ; notranslate">

var myImage:BitmapData;

var myContainer:Bitmap;

const MAX_NUM:int = 300;

for (var i:int = 0; i&lt; MAX_NUM; i++)
{

	// ساخت بیت مپ ۲۰ در ۲۰ پیکسل که شفافیت پس زمینه در آن غیر فعال شده است
	myImage = new BitmapData(20,20,false,0xF0D062);

	// ساخت یک نگه دارند برای هر مورد به صورت مجزا

	myContainer = new Bitmap(myImage);

	// افزودن به لیست نمایش - Display List

	addChild(myContainer);

	// موقعیت دهی هر نگه دارنده

	myContainer.x = (myContainer.width + 8 ) * Math.round(i % 20);

	myContainer.y = (myContainer.height + 8 ) * int(i / 20);

}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در نسخه بهینه سازی شده کد بالا (که در زیر قابل مشاهده است) یک BitmapData ایجاد می شود و برای چندین بار برای هر Bitmap استفاده می شود و نتیجه مشابه مورد قبل نیز خواهیم داشت، البته با اشغال مقدار کمتری از حافظه.</p>
<pre class="brush: as3; title: ; notranslate">
// ساخت بیت مپ ۲۰ در ۲۰ پیکسل که شفافیت پس زمینه در آن غیر فعال شده است
var myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);

var myContainer:Bitmap;

const MAX_NUM:int = 300;

for (var i:int = 0; i&lt; MAX_NUM; i++)
{

	//ساخت یک نگه دارنده که به بیت مپ کلاس تعریف شده ارجاع می شود

	myContainer = new Bitmap(myImage);
	// افزودن به لیست نمایش - Display List
	addChild(myContainer);
	// موقعیت دهی هر نگه دارنده
	myContainer.x = (myContainer.width + 8 ) * Math.round(i % 20);

	myContainer.y = (myContainer.height + 8 ) * int(i / 20);

}
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">در این مورد با بهینه سازی انجام شده نزدیک به <strong>۶۵۰ تا ۷۰۰ کیلوبایت</strong> در حافظه (memory) فلش بهینه سازی انجام شده است که مقدار قابل توجهی می باشد به خصوص برای برنامه هایی که برای گوشی ها و دستگاه هایی به غیر کامپیوتر ها آماده می شود.<br />
<strong></strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>روش دست یابی به مقدار حافظه مصرفی در فلش:</strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">از کد ساده زیر استفاده کنید در در پنجره خروجی output مقدار حافظه مصرفی را مشاهده کنید.</p>
<pre class="brush: as3; title: ; notranslate">

trace(Number( System.totalMemory / 1024 / 1024 ).toFixed( 2 ), &quot;Mb&quot;);
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right"><strong>نکته : </strong></p>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">کد زیر که در نمونه اول ذکر شده است برای تولید یک رنگ تصادفی استفاده می شود در واقع مقدار یک رنگ که به عنوان ثابت در ابتدا تعریف شدن در فرمان random ضرب می شود که حاصل آن یک رنگ اتفاقی می باشد.</p>
<pre class="brush: as3; title: ; notranslate">
Math.random()*COLOR;
</pre>
<p style="font-family: Tahoma,Verdana,sans-serif; direction: rtl;" align="right">موفق و پیروز باشید.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.iflashlord.com/1390/02/%d8%a8%d9%87%db%8c%d9%86%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%84%d8%b4-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%af%d9%88%d8%a8%d8%a7%d8%b1%d9%87-%d8%a7%d8%b2-object-%d9%87%d8%a7/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching 3/33 queries in 0.092 seconds using disk: basic
Object Caching 5310/5540 objects using disk: basic

Served from: blog.iflashlord.com @ 2012-02-05 19:45:26 -->
