خانه » برنامه نویسی » اکشن اسکریپت » اکشن اسکریپت ۳ وتفاوتها با اکشن اسکریپت ۲

اکشن اسکریپت ۳ وتفاوتها با اکشن اسکریپت ۲

اکشن اسکریپت ۳ وتفاوتها با اکشن اسکریپت ۲

سلام این بار یک مقاله کامل که از نوشته دوستان در انجمن جمع آوری شده رو می زارم این ماله چندیدن روزه شما به صورت یک جا بخونید ، مربوط به اکشن اسکریپت ۳ می باشد
خوندن و آزمایش و تمرین این مقاله رو برای اونایی که هنوز جرات نکردن وارد دنیای جدید برنامه نویسی قدرتمند فلش بشن بسیار بسیار توصیه میکنم اگه این مقاله رو بخونید حتما دیگه ترسی از سختی یا جدیدی این زبان نخواهید داشت

اول از همه چیز اینه که AS3 از کد پایه دوباره نوشته شده و قاعدتا با AS2 تفاوت خواهد داشت . این باز سازی کد ها باعث افزایش چشمگیر سرعت اجرای دستورات شده و البته همین مزیت امکان ترکیبAS3 با ورژن های قبلی این زبان را در یک فایل سلب کرده است . قبل از شرع AS3 توجه داشته باشید که هر تغییری نیاز به صرف زمان داره همچنین از جدید بودن قالب این زبان نترسید چون تجربه نشون داده یادگیری اون برای افراد مبتدی از نسخه های قبلی آسون تر بوده.

بد نیست برای اینکه علت بوجود اومدن اون رو بفهمیم یه نگاه به تفاوت های این دوتا و قابلیت های جدید AS3 بندازیم :

  1. گزارش دقیقتر خطا ها
  2. ارتقای دستور زبان
  3. معماری جدید سیستم نمایش(display)
  4. معماری جدید مدیریت اتفاقات (events)
  5. ارتفای امکانات ارتباط با XML
  6. قابلیت جدید کار با text ها
  7. امکانات جدید مدیریت صدا ها
  8. قابلیت جدید دسترسی به داده ها : می تونید به داده ها در حین دانلود دسترسی داشته باشید!
  9. ارتقای برنامه نویس شی گرا

کاربران AS3 علاوه بر کار در محیط فلش می تونند برای پلتفرم های جدید فلش مثل Flex و adobe AIR هم برنامه نویسی کنند . اگر چه یک پروژه AIR میتونه شامل HTML ، PDF و Java Script هم باشه اما AS3 ابزار اصلی و جامع این نوع اپلیکشن هاست.

شروع :
بخش اول :

۱- تعریف متغیر ها به همون شکل AS2 است و تغییری نکرده :

کد:

var myVariable:Number = 1;

2- همچنین عملگر های شرطی و کنترلی :

کد:

if (a == 1 && b == "goodbye") {
trace("options a and b");
}

for (var i:Number = 0; i < 3; i++) {
trace("hello");
}

switch (a) {
case 1 :
trace("one");
case 2 :
trace("two");
break;
}

while (num < .5) {
num = Math.random();
}

3- آریه ها هم :

کد:

var myArray:Array = new Array();
myArray.push(1);
trace(myArray)
// 1 appears in the Output panel
myArray.push(2);
// the array now has two items: 1, 2
trace(myArray.pop());
// the pop() method removes the last item, displaying its value of 2
trace(myArray)
// the lone remaining item in the array, 1, is displayed

4- فانکشن ها هم:

کد:

function showMsg(){
trace("hello");
}
showMsg();

5- اشیا :

کد:

var plane:Object = new Object();
plane.pitch = 0;
plane.roll = 5;
plane.yaw = 5;

6- تریگر ها :

کد:

this.mc.width;

7- تعریف جدید تر مفاهیم Properties وMethods و Events:

Properties: شامل ویژگی های یک شی است مثل طول ، عرض ، شفافیت .
Methods: شامل کارهایی که یک شی می تونه انجام بده مثلا :play, stop,getUrl
Events: شامل همه اتفاقاتی که ممکنه برای یک شی بیفته مثلا کلیک شدن ، لود شدن ، درگ شدن و… . این اتفاقات هنگام واقع شدن باعث اجرا شدن یک سری دستورات که ما تعیین می کنیم می شوند .
EventHandlers واسته ای هست برای اینکه اتفاقات را به فانکشن ها مرتبط کنه . این ویژگی چند تا تغییر کوچولو با AS2 داره :

کد:

rotate_right_btn.addEventListener(MouseEvent.MOUSE_UP,onRotateRight);
function onRotateRight(evt:MouseEvent):void {
box.rotation += 20;
}

متود addEventListener()برای تعریف یک event به کار میره و شیئی را که قرار است listening کنه رو به یک function وصل می کنه . در مثال بالا دکمه rotate_right_btn قراره منتظر بمونه تا یه mouseUp (کلیک که می کنی نه وقتی ول می کنی می گن mouseUp ) اتفاق بیفته و وقتی این اتفاق می فته فانکشن onRotateRight اجرا می شود . addEventListener()دو تا پارامتر داره. پارامتر اول می گه که دکمه قراره منتظر چه event یی باشه . پارامتر دوم اسم فانکشنی هست که هنگام اتفاق افتادن event باید صدا زده بشه . مثال زیر هم کاربرد پارامتر ورودی فانکشن onStartDrag هست که می تونه خیلی کاربردی باشه . evt.target آبجکتی را که event در مورد اون اتفاق افتاده تریگر می کنه. evt یک شیئ MouseEvent هست که target یک Propertie از اون هست .

کد :

myMovieClip.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);
myMovieClip.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
function onStartDrag(evt:MouseEvent):void {
evt.target.startDrag();
} function onStopDrag(evt:MouseEvent):void {
evt.target.stopDrag();
}

Frame Events :مثال بدون شرح

کد :

stage.addEventListener(Event.ENTER_FRAME,onFrameLoop);
function onFrameLoop(evt:Event):void {
cycle.x = mouseX;
cycle.wheel.rotation = mouseX;
}

-Timer Events :
همون طور که می دونید enterFrame به علت ثابت بودن فریم ریت در بازه های زمانی ثابت اتفاق می افته . Timer Eventاین اجازه رو میده تا یک فانکشن را در یک بازه زمانی دینامیک و دلخواه صدا بزنیم . این قابلیت در AS2 بوسیله تابع setInterval() قابل پیاده سازی بود .

کد :

var timer:Timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
function onTimer(evt:TimerEvent):void {
watch.hand.rotation +=5;
}

بخش دوم :
یک مفهوم جدید واساسی : DisplayList

سلام ماه رمضون مبارک اگه آنتن داد ما اموات رو هم یاد کنید .
پیچیدگی ، پراکندگی و بی نظمی هایی که در AS2 برای ایجاد در حال اجرای (runTime ) اشیای گرافیکی (مثل متن ها ، عکس ها ، مووی کلیپ ها و … ) وجود داشت باعث شد تا تو AS3 یه حال اساسی به این مقوله داده بشه ، نتیجه این تغییرات بنیادی ، شده Display list .
برای اینکه مفهوم Display list رو خوب بفهمید اول خوب به فایل فلش توجه کنید و دقیقا پیش خودتون مشخص کنید چه چیزایی رو میبینید و اون ها رو دسته بندی کنید . به قول این کتاب این همه نصف راهه .

Display list بخش نگهدارنده همه اشیاء بصری داخل فایل شماست . بوسیله Display list می تونید یک شیء گرافیکی را اضافه یا حذف کنید ، اون ها را کنار هم قرار بدید و ارتباط اونها رو با هم تعیین کنید . برای نمونه توی فایل مثلا زیر – شکل ۱ – ما یک shape داریم ، یک Text و یک Movie Clip که داخل اون یک تصویر بیت مپ قرار داره . اما AS3 فایل ما رو به شکلDisplay list متناظرش–شکل ۲- می بینه .

واضح و مبرهن است که Display list یک شیء است و هر شیئی را کلاسی اندر است . نوع داده های کلاس display object به صورت زیر است :

یه سری توضیح برای اشیاء جدیدالورود :
DisplayObject : هر چیزی که در display list می تواند وجود داشته باشد .
Shapes : یک مستطیل ، بیضی ، خط و یا هر چیز دیگری که بوسیله ابزار ها کشیدی می شوند .
Bitpam : تنها بیت مپ هایی در این قسمت جا می گیرند که بوسیله کلاس bitmap data و در حال اجرا بوسیلهAS3 ساخته شده باشند . توجه داشته باشید عکس های jpg که که وارد فایل می شوند در این نوع از bitmap دسته بندی نمی شند و در گروه shape ها قرار می گیرند .
Video : یک شی video display که حداقل ش اینه که یک ویدیو رو پخش کند . بطور استاندارد یک کامپوننت player .
InteractiveObject : این کلاس همه اشیاء display Object رو که بوسیله کاربر و توسط موس و صحفه کلید قابل تغییرند رو شامل می شه .
این کلاس به طور دستی به display list اضافه نمی شه . ما فقط می تونیم با زیر مجموعه هاش کار کنیم .
DisplayObjectContainer : این کلاس شبیه display object است با این تفاوت که این یکی میتونه داخلش چند تا display object داشته باشه که به این display object داخلیش می گن بچه -children – . مثلا video یک display object هست اما نمی تونه داخلش یک display object داشته باشه اما Movie clip با اینکه خودش هم display object هست اما می تونه داخل خودش display object داشته باشه پس Movie clip یک DisplayObjectContainer است .AS3 چند مدل DisplayObjectContainer داره :
Stage : تقریبا همون root خودمونه و display object های زیر مجموعه اش هم با همین اسم می تونند آدرس دهی بشن . البته توجه کنید که خودش بخشی از Display list هست .
Sprite : این یکی خیلی جدیده . sprite یک مووی کلیپ بدون تایم لاینه .
Loader : برای لود swf یا bitmap ها .
AVM1Movie: این کلاس برای کار با swf هایی که با AS1 یا AS2 ساخته شدند و قراره لود بشند به کار می ره . مخفف ActionScript Virtual Machine 1 هست . swf لود شده با فایل اصلی هیچ رابطه ندارند . البته احتمالا با local conection قابل پیاده سازی باشه .

root_در برابر root :
در AS2 کلمه _root به تایم لاین swf اصلی اشاره می کرد . چون _root یک متغیر global و همیشه ثابت بود اگر فایلی رو لود می کردین که توی اون به _root اشاره می شد _root فایل اصلی در نظر گرفته می شد . در AS3 کلمه root یک متغیر متعلق به display object است و معمولا به تایم لاین اصلی اشاره نمی کند .

بخش سوم :

چینش اجرای Display list

addChild() :

برای اضافه کردن یک display object به display list دو گام ساده نیاز هست :
۱-ساختن یک display object (در مثال اینجا یک MC ) :

کد :

var mc:MovieClip = new MovieClip();

این دستور یک مووی کلیپ می سازه ام ، اونو نمایش نمی ده .
۲- برای نمایش این MC باید اونو به display list اضافه کنیم :

کد :

addChild(mc);

اگر شما یک displayObjectContainer داشته باشید و بخواید MC تون توی اون باشه می تونید دستور addChild() رو به صورت زیر بنویسید :

کد :

navBar.addChild(mc);

دو تا مثلا برای انواع دیگه display Object :

کد :

var sp:Sprite = new Sprite();
addChild(sp);
var sh:Shape = new Shape();
addChild(sh);

توی AS2 مووی کلیپ ها یه خصوصیت دیگه هم به اسمdepthداشتند که لایه بندی اونها رو مشخص می کرد . display list این کار رو به طور خودکار انجام میده و هر شیئی که add میشه رو به بالا ترین سطح z موجود میبره و البته بطور دستی هم می شه اونو تعیین کرد .

اضافه کردن یک symbol به display list :
توی کتابخانهگزینه linckage مووی کلیپ مورد نظرتون رو کلیک کنید و گزینه Export for ActionScript رو هم فعال کنید کنید :

در جعبه Base class کلاسی که قراره symbol مورد نظرتون وارثش بشه رو مشخص کنید .

و حالا :

کد:

var cycle:MovieClip = new Unicycle();
addChild(cycle);

در اینجا قدرت شی گرایی فلش رو دیدیم در ادامه بیشتر به این موضوع می پردازیم

بخش چهارم : ( برنامه نویسی شی گرا)Object-oriented programming

به طور مختصر برنامه نویسی شی گرا یک روش برای حل مسئله های بزرگ که نیاز به استفاده از قانون تفرقه بنداز و حکومت کن داره هست . توی این روش مسئله بزرگ به زیر مسئله های کوچک خرد می شند که ریز حلال های این ریز مسائل رو می شه با کمی مسامحه به همون اسم کلاس صدا زد .
البته گروهی از برنامه نویسان این روش بسار خوب رو به کشتن پشه با چکش تشبیه می کنن واقعا همین جوره البته برای کار های کوچک ولی برای پروژه های بزرگ واقعا کار رو راحت می کنه مخصوصا پر کار برد ترین بخش شی گرا که واثت کلاس ها از یکدیگری که با استفاده از روشهای تک خال single ton و دیگر روشهای موجود میشه از حجم کد نویسی اضافه زیادی جلوگیری کرد

قالب کلی یک کلاس ساده :

کد :

package {
import flash.display.MovieClip;

public class Main extends MovieClip {
public function Main() {
trace("Flash");
}
}
}

کلمه package کلاس و همه اجزای مرتبط با اون رو توی خودش بسته بندی می کنه . و البته کاربردهای دییگه هم داره که می بینیم . خط دوم به اصطلاحا کامپایلر می گه که می خوایم شی ما تمام متود ها ، پروپرتی ها و ایونت های MovieClip رو هم داشته باشه .
کلمه extends MovieClip استفاده از مفهوم وراثت توی بحث OOP است . وراثت یعنی صرفه جویی در کد . با این کار شما کلاس MovieClip رو توسعه می دین بدون اینکه از محتویاتش اطلاع داشته باشید .
حالا کد بالا رو توی پوشه فایل FLA جاری با نام Main.as ذخیره کنید و توی فریم اول کد زیر رو بنویسید و اجرا کنید :

کد:

var main:Main = new Main();

Class Paths :
برای استفاده از کلاس ها چند روش وجود داره . اول اینکه خود فلش همه فایل های .as داخل پوشه خودش رو به طور خودکار import می کنه مثل مثال بالا . دوم ؛ بعضی مواقع لازم می شه تا کلاس ها داخل پوشه ها قرار بگیرند تا دسته بندی دقیق تری انجام بشه . توی این حال برای دسترسی به فایل های داخل پوشه ها برای هر پوشه از یک نقطه استفاده می کنیم :

کد:

import myapp.effects.Water;

توی این مثال ما کلاس myapp>effects>Water.as رو import می کنیم . البته باید توی خود Water.as هم باید تغییراتی رو بدیم :

کد:

package myapp.effects {

public class Water {
public function Water() {

}
}
}

سوم می شه از Publish settings هم کلاس ها رو به پروژه اضافه کرد .

یه مثلا برای تکمیل و تفریح :

کد:

package {
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.events.Event;

public class Box extends MovieClip {
public var color:uint = 0x000099;
public function Box() {
//draw a shape at runtime
this.graphics.lineStyle(1, 0x000000);
this.graphics.beginFill(color);
this.graphics.drawRect(0, 0, 100, 100);
this.graphics.endFill();
this.addEventListener(Event.ENTER_FRAME, onLoop, false,0, true);
}
private function onLoop(evt:Event):void {
this.x += 5;
}
}
}

addChild() یادتون نره پایان کار باید اسفاده بشه ها .

به نظرم تا اینجا یه Action Scrip 2.0 کار می تونه با Action Script 3.0 کار کنه . البته این چرند و پرند هایی که من گفتم حتما ناقص هست ؛ ام ، به نظرم برای یه AS2 کار یکفی بالاشاره . بقیه چیزها به سادگی حین کار یاد گرفته می شند مثلا اینجا لازم نیست که من از ()gotoAndStop چیزی بگم در صورتی که شاید برای یک AS3 کار دونستنش از نون شب هم واجب تره و باز هم البته AS3 یک هوا از AS2سره و تکنیک ها و خروجی هایی که می شه از کشید بیرون در حد معجزه ست .
تا حدی که هم اکنون متورهای پردازش سه بعدی زیادی باین ورژن نوشته شده که با اونا میشه بازی سه بعدی کامل با فلش ساخت استفاده کمتر از رم و نیز کمتر به پردازش از حسن ها اصلی این ورژن می باشد تقریبا تا جایی که تونستن از قابلیتهای برتر دیگر زباهای برنامه نویسی برای بهتر شدنش کمک گرفتن به زودی در ادامه آموزش ها به بحث سه بعدی سازی با AS3 هم خواهیم پرداخت

::یک توضیح ضروری::
برای اشاره کردن به اجزای یک فایل توی AS2 معمولا از _parent , _root استفاده می شه . توی AS3 وقتی از این قابلیت استفاده کنید .

مثلا :

کد:

parent.gotoAndStop(20);

هنگام اجرا با خطا مواجه می شید

Access of possibly undefined property gotoAndStop through a reference with static type flash.displayisplayObject

این به خاطر اینه که فلش نمی دونه جنس parent از چیه . واسه حل این مشکل به این روش عمل می کنیم :

کد :

MovieClip(parent).gotoAndStop(20);

با این کار برای فلش مشخص می کنید که parent از چه جنسی می باشد.

در پایان چند ابزار مفید برای برنامه نویسی با AS3 رو براتون می زارم تا تقریبا مقاله تکمیل بشه ;)

تبدیل اکشن اسکریپت ۲ به اکشن اسکریپت ۳ (AS2 to AS3 convertor)
برای اجرا به جاوا ران تایم احتیاج داره و می بایست جاوا رو روی سیستم نصب کرده باشید. این هم یه قسمت از توضیحات هست.

Installation and usage:
To use this application you must first install the JRE. Then you must modify ‘run.bat’ with a text editor. Finally, you just double-click run.bat to run it.
1.) Install the Java Runtime Environment (JRE) – http://java.sun.com
2.) Open run.bat with a text editor.
3.) Modify the path variable to point the ‘bin’ directory of your JRE installation.
4.) Modify the 3 directories on the line that looks like the line below. In order, the directories are the AS2 source directory, the AS2 output directory, and the AS3 output directory.
java -jar As3CodeUpdater.jar “C:codeAs2Source” “C:codeAs2Output” “C:codeAs3Output”
۵.) Save it. Double-click run.bat

توضیحات و فایل مروطه به صورت زیپ شده برای دانلود :
http://www.electrotank.com/junk/jobe/AS2_to_AS3.zip

جدول تطبیق دستورات as2 با as3

این جدولی که توی پیوست هاست فکر کنم خیلی مفید باشه واسه اینکه ببینید حدودا چقد as2 با as3 فرق کرده و یه دسته بندی خوب هم داره …حتما ببینید. این جا رو هم ببینید که حتما مفیده برای درک بهتر فلش …

این هم به صورت فایل زیپ می تونید از اینجا دانلود کنید

وای چقدر زیاد شد خسته شدم
دوستان هر سوال یا مشکلی بود در خدمتم
امیدوارم بستری را برای مهاجرت برنامه نویسان از AS2 به AS3 فراهم اورده باشم بقیش دیکه به تلاش و پشتکار خودتونه
انشاء الله موفق و پیروز و سربلند باشید ، بهروز

پ.ن : پاسخ به یک سوالاتی که از طرف کاربران پرسیده شده است به دلیل کاربردی بود :

۱-علی رضا

سوال :

اگر میشه در مورد متدهای Stage هم مطلبی بنویسید.

جواب :

جا به صورت خلاصه مفید ترین هاشو در AS2 به صورت زیر میباشد

Stage.align = "T";
Stage.scaleMode = "noscale";
Stage.showMenu = false;
Stage.addListener(listener);
Stage.fullScreenWidth()
Stage.fullScreenHeight()
Stage.fullScreenSourceRect()

البته تفاوت کوچکی در AS3 وجود دارد که بهتره برای لیست کامل به راهنمای فلش مراجعه کنید

۲- هاجر

سوال :

سلام روزتون به خیر. اگر اجازه دهید چند سوال در مورد اکشن اسکریپت ۳ و فلش ۱۰ بپرسم.
۱- من یک فیلم فلش ساخته ام که سه لایه صوتی دارد. که هر یک در برگیرنده صدای یک خواننده است. می خواستم فرمی طراحی کنم که کاربر خودش خواننده مورد نظر را انتخاب کند. پس از انتخاب توسط کاربر دیگر لایه های صوتی غیر فعال شوند. لطفا من را راهنمایی کنید.

۲- آیا راهی هست که به شماره لایه های یک فیلم فلش و یا شماره لایه های یک فیلم فلش که در فیلم اصلی لود شده است دسترسی پیدا کرد و آن ها را کنترل کرد.

۳-فکر می کنم تفاوت هایی بین لود کردن چند فیلم فلش در یک فیلم اصلی در as3 و as2 وجود دارد. آیا در as3 هم مانند as2 بحث سطوح مختلف (سطح صفر برای فیلم اصلی و سطوح ۱ به بعد برای فیلم های بعدی) وجود دارد؟آیا می توان کاری کرد که یک فیلم فلش خارجی در زیر برخی عناصر (مثلا یک shap) فیلم اصلی قرار بگیرد؟ آیا راهی وجود دارد که در فیلم اصلی دکمه هایی برای لود کردن فیلم های مختلف قرار دهیم که هر یک فیلم خاصی را لود می کنند و فقط یک دکمه stop وجود داشته باشد که فیلم های لود شده متوقف کند؟
در ضمن از آشنایی با سایتتون خیلی خوشحال شدم. اگر ممکن است مطالب آموزشی عملی را بیشتر قرار دهید.
متشکرم

جواب :

۱ – نکته ای رو در اول بگم اگه به صورت اکسترنال اکشن و یا پکیج برنامه نویسی می کنید و صدا ها تون هم از بیرو بارگزاری می کنید از این دو ورودی استفاده نمایید(در ابتدای کد)

code>import flash.media.Sound;
import flash.net.URLRequest;

شما نیازی نیست که هر صدا را در یک لایه قرار دهید فقط کافیت آنها را وارد library کنید

و بعد بر روی هر صدا راست کلیک می کنید و linkage را انتخاب نمایید کادرس شبیه به عکس زیر باز می شه در قسمت class برای هر کدام ار صدا ها یک نام بگذارید

در واقع تنها لازم است که شما با انتخاب کابر صدای مورد نظر را فراخوانی کنید . چگونه اش رو در پایین می نویسم

var mySound:Sound = new MyFavSong();
var mySound2:Sound = new MyFavSong2();
var mySound3:Sound = new MyFavSong3();

خوب تا اینجا فقط صدا ها رو تعریف کردیم حالا برای پخش و ایشت هر کدوم کافیه از play براشون استفاده کنیم

mySound.play();

این ها که گفتن به صورت کلی بود برای این موضوع یک فایل سورس مثال میزارم تا استفاده کنید
برای دانلود سورس استفاده صدا در اکشن اسکریپت ۳ کلیک کنید

برای کنترل بر بیشتر بر روی صدا ها می بایست چنل تعریف کنید که البته توی کد سورس بالا وجود دارد

۲ – در واقع نه به این منظور از لایه ها ولی به سطوح depth ها می شود دسترسی پیدا کرد و آنها را بالا و پایین برد

۳ – بله در کد و روش و نوع کار
بله ولی با تعرفی جدید
بله این کار هم توسط depth امکان پذیر می باشد
بله مانند مثال صدا شما یک شی برای پخش ویدئو ایجاد می کنید و تنها با دکمه های ارجاع برای پخش را عوض می کنید و با یک دکمه ایست شدن هر فیلمی را در این شی ایست می کنید
متاسفانه به دلیل طولانی بودن و البته یه کم پیچیده بود امکان نوشتنش در اینجا نیست ؛ انشاء الله در مقاله ای دیگر…

در مورد depth در اکشن اسکریپت ۳ می بایست از روشهای زیر استفاده کنید

setChildIndex(example,0);

که به جای صفر می تونید عدد مورد نظرتون برای سطح رو وارد نمایید

برای بدست آوردن آخرین سطح منهای یک از کد زیر استفاده می کنیم ، در واقع numChildern تعداد فرزند های موجود در والد می باشد

setChildIndex(example,numChildren - 1);

برای بالا بردن سطح نسبع به یک شی دیگر ابتدا سطح شی دیگر رو می گیریم و به اضافه یک به شی جدید خودمون اضافه می کنیم

var otherindex = getChildIndex(theotherthing);
//Behind that thing:
setChildIndex(example, otherindex)
//^ pushes the other thing forward
//In front:
setChildIndex(example, otherindex + 1);

3- پریسا

سوال:

ممکن است در مورد ساختن نواری که مدت زمان سپری شده از یک فیلم را نشان می دهد توضیح دهید.(فکر می کنم اسمش playback bar است).

جواب:

در واقع به این موارد playback bar و یا seek bar گفته میشه که به عنوان یک کامپوننت آماده در بخش کاموننت های فلش موجود می باشد و تنها کافیست آدرس فیلم و تنظیمات خود را وارد نمایید
ساخت این موارد یه کم توضیحشون طولانی می شه
ولی در کل اینه که طول فلیم رو بر اساس زمانش در یافت می کنیم و حالا می بایست به نسبت به عرض نواری که داریم تبدیلش کنیم و یک مووی کلیک مانند نوار بارگزاری اگه دیده باشید ایجاد کنیم و حالا می بایست یک مووی کلیپ با سایز مورد نظر ثابت برای نوار خالی بسازیم و با فرمان مختصات موس روی محورهای ایکس محل کلیک رو دریافت کنیم و فیلم و مووی کلیپ دوم که نمایش گر فیلم تا محل نمایش داده شده است رو حرکت بدهیم
البته این کار توسط یک EnterFrame هم می بایست در زمان پخش فیلم انجام شود
البته یه نوار به یک رنگ دیگر نیز برای زمان بارگزاری فیلم استفاده میشه

اینها که گفتم تقریبا اصول کلی بود که هم برای ویدئو و صدا و هم پیمایش فایل swf استفاده میشه و نیاز به برنامه نویسی زیادی داره
با توجه به این که شما می تونید قالب بندی پلیرهای آماده درون کامپوننت های فلش رو خودتون تغییر بدید به صرفه تر این است که از کامپوننت ها استفاده کنید
ولی در هر حال من یک نمونه کد براتون میزارم تقریبا کامله و برای اسختن دستی این موضوع میباشد

var mediaURL:String = "http://files.fliiby.com/streamVideo.php?file=u25u74oigj.flv";
var duration:Number;
var video:Video = new Video(320, 240);
addChild(video);
setChildIndex(video,1);
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
var stransform:SoundTransform = new SoundTransform();
ns.soundTransform = stransform;
video.smoothing = true;
ns.addEventListener(NetStatusEvent.NET_STATUS, onStatusEvent);
function onStatusEvent(stat:Object):void
{
trace(stat.info.code);
if(stat.info.code == "NetStream.Buffer.Full") {
bufferClip.visible = false;
}
if(stat.info.code == "NetStream.Buffer.Empty") {
bufferClip.visible = true;
}
if(stat.info.code == "NetStream.Play.Stop") {
ns.seek(0);
}
}
var meta:Object = new Object();
meta.onMetaData = function(meta:Object) {
duration = meta.duration;
}
ns.bufferTime = 0.1;
ns.client = meta;
video.attachNetStream(ns);
ns.play(mediaURL);
playButton.addEventListener(MouseEvent.MOUSE_UP, playButton_Release);
function playButton_Release(event:MouseEvent) {
ns.togglePause();
}
rewindButton.addEventListener(MouseEvent.MOUSE_UP, rewindButton_Release);
function rewindButton_Release(event:MouseEvent) {
ns.seek(0);
}
var videoInterval:uint = setInterval(videoStatus,100);
function videoStatus() {
var amountLoaded:Number = ns.bytesLoaded / ns.bytesTotal;
loader.loadbar.width = amountLoaded * 208.9;
loader.scrub.x = ns.time / duration * 208.9;
}
var scrubInterval:uint;
loader.scrub.addEventListener(MouseEvent.MOUSE_DOWN, loaderScrub_click);
function loaderScrub_click(event:MouseEvent) {
clearInterval(videoInterval);
scrubInterval = setInterval(scrubit,10);
loader.scrub.startDrag(false,new Rectangle(0, loader.scrub.y, 208, loader.scrub.y));
}
loader.scrub.addEventListener(MouseEvent.MOUSE_UP, loaderScrub_Release);
loader.scrub.stage.addEventListener(MouseEvent.MOUSE_UP, loaderScrub_Release);
function loaderScrub_Release(event:MouseEvent) {
clearInterval(scrubInterval);
videoInterval = setInterval(videoStatus,100);
loader.scrub.stopDrag();
}
function scrubit() {
ns.seek(Math.floor((loader.scrub.x/208)*duration));
}
var playerMenu:ContextMenu = new ContextMenu();
playerMenu.hideBuiltInItems();
var item1:ContextMenuItem = new ContextMenuItem("::::: Video Controls :::::");
var item2:ContextMenuItem = new ContextMenuItem("Play / Pause Video");
var item3:ContextMenuItem = new ContextMenuItem("Replay the Video");
var item4:ContextMenuItem = new ContextMenuItem("© ۲۰۰۹ IFLashLord.Com");
item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, pauseIt);
item3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, restartIt);
playerMenu.customItems.push(item1, item2, item3, item4);
contextMenu = playerMenu;
function pauseIt(event:ContextMenuEvent):void {
trace("pauseIt()");
ns.togglePause();
}
function stopIt(event:ContextMenuEvent):void {
trace("stopIt()");
ns.seek(0);
ns.pause();
}
function restartIt(event:ContextMenuEvent):void {
trace("restartIt()");
ns.seek(0);
}
function setVolume(val):void {
stransform.volume = val;
ns.soundTransform = stransform;
}
function getVolume():Number {
return stransform.volume;
}
function soundOff():void {
setVolume(0);
}
function soundOn():void {
setVolume(1);
}
mute.addEventListener(MouseEvent.MOUSE_OVER, mute_Mouseover);
function mute_Mouseover(event:MouseEvent) {
if(getVolume() == 1) {
mute.gotoAndStop("onOver");
}
else {
mute.gotoAndStop("muteOver");
}
}
mute.addEventListener(MouseEvent.MOUSE_OUT, mute_Mouseout);
function mute_Mouseout(event:MouseEvent) {
if(getVolume()== 1) {
mute.gotoAndStop("on");
}
else {
mute.gotoAndStop("mute");
}
}
mute.addEventListener(MouseEvent.MOUSE_UP, mute_Click);
function mute_Click(event:MouseEvent) {
if(getVolume() == 1) {
setVolume(0);
mute.gotoAndStop("muteOver");
}
else {
setVolume(1);
mute.gotoAndStop("onOver");
}
}

4 – هاجر

سوال :

مشکل من فارسی نوشتن روی این کامپوننت هاست . مخصوصا در مورد comboboxها. در ضمن من اصلا فونتی که فلش برای فارسی استفاده می کند دوست ندارم چطور می توانم آن را تغییر دهم.

. اگر بخواهیم با زدن یک دکمه یکی از سطرهای comboboxظاهر شود آیا باید از prompt استفاده کنیم؟ (من استفاده کرده ام ولی جواب نمی دهد)
یک سوال دیگر من می خواهم یک شکل نامنظم را که در فتوشاپ طراحی کرده ام به عنوان ماسک روی صفحه قرار دهم ولی وقتی آن را در فتوشاپ paste می کنم یک پس زمینه سفید در کنار آن قرار می دهد. حتی اگر خود شکل را انتخاب کرده باشم. به نظر شما بهترین کار برای طراحی شکل های پیچیده چیست؟ و این که وقتی در فتوشاپ یک شکل را (مثل یک ابر )انتخاب می کنم و feather ان را تنظیم می کنم و آن را در فلش paste می کنم خطی در اطراف شکل می اندازد که نمی توان آن را از بین برد راه حل آن چیست؟

پاسخ :

مشکل فارسی در فونت می باشد که با کد زیر می توانید فونت و فرمت مورد نظر خود را تعیین نمایید :

my_listBox.setStyleProperty("textFont", "Tahoma");

این خصوصیت استایل می باشد که برای قالب بندی به کار می رود

و یا

my_listBox.setStyle("fontFamily", "Tahoma");

اگر از اکشن اسکریپ ۳ استفاده می کنید با کد زیر میتوانید به تمامی کامپوننت های فعال در پروژتون فونت و استایل مورد علاقتون رو اعمال کنید

//set Style to all
var ff:TextFormat = new TextFormat();
ff.font="Tahoma";
ff.size=12;
ff.color=0x000000;
ff.align="right";
import fl.managers.StyleManager;
StyleManager.setStyle("textFormat", ff);

نه نیازی به این کار نمی باشد ،اگه منظورتون از ظاهر شدن انتخاب شدن یک گزینه میباشد!؟ برای این کار می بایست مقدار selected را تغییر دهیدبهترین راه برای ورود تصویر به فلش استفاده از نرم افزار fireworks می باشد که ارتباط قوی با فلش دارد
در مورد ماسک گذاری یک تصویر در صورتی که حتی پس زمینه نداشته باشد نمی توان به عنوان ماسک در فلش استفاده نمود و می بایست طرحی وکتور و در فلش برای ماسک از روی طرح مورد نظر خود بکشید(طراحی نمایید)

در مورد آخر هم با استفاده از نرم افزار fireworks مشکل حل می شود ولی در غیر این صورت می بایست خروجی تصویر را png بگیرید و بعد تصویر را وارد فلش کنید ، در صورتی که لازم داشته باشید در نرم افزار فلش امکان فشرده سازی تصویر وجود دارد

سوال :

این کد که در action script 2.0 عمل میکنه اگر بخواهیم در action script 3.0 بنویسم باید چطور نوشته بشه؟

Stage.align =''C'';
Stage.scaleMode=''noSclee'';
Stage.showMenu=false; false;setProperty('''',_quality, ''best'');

جواب:
به جای اون کد ها می بایست از کدهای زیر در اکشن اسکریپت۳ استفاده نمایید

import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.StageQuality;
import  flash.ui.ContextMenuItem;

stage.scaleMode = StageScaleMode.SHOW_ALL;
stage.align = StageAlign.TOP_LEFT;
stage.quality =StageQuality.BEST;

var cm:ContextMenu= new ContextMenu();
cm.hideBuiltInItems();
this.contextMenu = cm;

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

271 نظر

  1. سلام
    یک سوال داشتم
    چطور می تونم بازی فلش ۳بعدی درست کنم من یک موتور بازی تحت فلش پیدا کردم به اسم Alternativa3D ولی اطلاعاتم خیلی کمه در ضمینه فلش هم چیز زیادی نمی دونم
    آیا ما میتونیم کاراکتری که با ۳dmax یا بلندر درست کردیم رو وارد Alternativa3D کنیم و چه فرمتی رو می پزیره fbx, obj
    فرمت صدا چی
    فرمت ویدیو چطور mp4

    • سلام همه مواردی که می خواهید توسط این موتور و موتورهای دیگر مثل Away3D امکان پذیر هست ولی به دانش بالا در زمینه اکشن اسکریپت و فلش نیاز دارد و متاسفانه با اطلاعات کم ساخت بازی آن هم به صورت سه بعدی نه تنها سخت شاید بتوان گفت غیر ممکن خواهد بود ، بهتر هست ابتدا دانش خود را در این زمینه ارتقاع داده و در مرحله بعد اقدام به ساخت بازی نمایید
      یا از موتورهایی بازی سازی مثل Unity3D استفاده کنید که ۸۰ درصد بر پایه محیط ویژوال کار می کنند.
      موفق و پیروز باشید

  2. سلام
    چگونه می توان در فلش یک متن تایپ رایتر(Type writer) داشته باشیم؟
    من کد های این اکشن اسکریپت را دارم ولی مشکلم اینه که متن رو از چپ به راست می خونه به جای اینکه از راست به چپ باشه.
    ممکنه کمکم کنید؟

  3. امین باویران

    سلام
    ماشالله اونقدر مطلب بود که توشون گم شدم ، اما نتونستم نیازم رو برطرف کنم

    میبخشید من میخوام مثلاً یک پیج ۱۵۰۰/۲۵۰ درست کنم و عکسی به عنوان بکگراند بزارم با سایز ۱۷۰۰/۲۵۰ ، الان همینجور که ۲۰۰ پیکسل از عکس بیرون هستش رو میخوام بدون کلیک با حرکت موس اینور اونور بره ، یعنی وقتی نشانگر موس به سمت چپ میره گوشه عکسی مه بیرون مونده بود رو با سرعتی ملایم حرکت بده بطرف داخل ، و وقتی برمیگردی سمت راست طرف راست حرکت کنه تصویر

    ممنونم از لطفتون

    • سلام می بایست با استفاده از MouseX و MouseY و برسی مختصات موس در زمان حرکت توسط رویداد EnterFrmae یا MouseMove با شرط ها مورد را چک کنید و در صورتی که می خواهید حرکت به صورت انیمیت باشد می توانید از کلاس های Tween استفاده کنید و مختصات را به صورت دلخواه تغییر دهید
      موفق و پیروز باشید

  4. امین باویران

    میبخشید باز مزاحم شدم ، اگه راه حل دیگه ای هست ممنون میشم کمکم کنید.

    کل هدف من اینه که با نشانگر موس خودکار اینور اونور کادر رو که در حالت عادی بیرون از کادر فلش هستند رو نشون بده

    ممنونم ازتون

    • سلام می بایست با استفاده از MouseX و MouseY و برسی مختصات موس در زمان حرکت توسط رویداد EnterFrmae یا MouseMove با شرط ها مورد را چک کنید و در صورتی که می خواهید حرکت به صورت انیمیت باشد می توانید از کلاس های Tween استفاده کنید و مختصات را به صورت دلخواه تغییر دهید
      موفق و پیروز باشید

  5. خدا رحمت کنه وپدر مادراتان و واقعا دستتون درد نکند
    فقط از شما خواهش میکنم در مورد مداد در نوشتن و ماسک گذاری دقیق ان راهنمایی فرمایید

  6. سلام,
    من میخوام یه پلیر تو فلش بسازم نه خیلی پیشرفته,همین چهار پنجتا دکمه اصلی
    تو سایتتون هم گشتم اما نتونستم پیداش کنم

    اگه ممکنه کمکم کنید

  7. عـلیـــــرضــ ــا

    سلام
    معادل این کد
    import flash.events.Event;

    pause_btn.addEventListener(MouseEvent.CLICK , onClickPause);
    function onClickPause(e:MouseEvent)
    {
    pause_btn.visible = false;
    play_btn.visible = true;
    }

    play_btn.addEventListener(MouseEvent.CLICK , onClickPlay);
    function onClickPlay(e:MouseEvent)
    {
    play_btn.visible = false;
    pause_btn.visible = true;
    }
    توی AS2 چه جوریه؟؟؟

  8. سلام
    معادل این کد در action script2چیست؟
    /* Click to Go to Scene and Play
    Clicking on the specified symbol instance plays the movie from the specified scene and frame.

    Instructions:
    1. Replace “Scene 3″ with the name of the scene you would like play.
    2. Replace 1 with the frame number you would like the movie to play from in the specified scene.
    */

    button_1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToScene);

    function fl_ClickToGoToScene(event:MouseEvent):void
    {
    MovieClip(this.root).gotoAndPlay(1, “Scene 3″);

  9. سلام. اکشن اسکریپت ادوب ایلوستریتور نیز از همین قوانین تبعیت میکند؟ شما منبع خاصی برای یادگیری آن سراغ دارید؟ ممنون

  10. سلام
    ممنون از شما که وقت میذارید

    یه سوال دارم:
    من از addEventListener با پارامتر تابع استفاده کردم اما خروجی برنامه ام منطقی نیست!
    لطفاً فایل رو ببینید:
    یک سری دکمه ی رنگی روی stage هستند. وقتی موس روی هرکدوم میره، یه دکمه ی مستطیلی روی اون دکمه قرار میگیره
    وقتی این دکمه ی مستطیلی رو کلیک میکنیم باید اسم دکمه ی زیرش رو بهمون بده
    اما اسم بعضی دکمه های دیگه رو هم میده!

    میشه لطفا ببینید اشکالش کجاست؟

    http://uploadyar.com/597b72a7d806851/fla/question.fla

  11. سلام و احترام
    (loadMovie(“exteralSWF.swf”,_root
    معادل as3?
    این قسمت root_ خیلی مهمه برام. نمی خوام به هیچ وجه تو خودش لود شه
    سپاس فراوان

  12. سلام
    وقت بخیر

    منظور از این خطا چیه؟
    Line 1 1180: Call to a possibly undefined method addFrameScript.

    به package اشاره میکنه!

    من چندتا مووی کلیپ روی استیج دارم که دوتا فریم دارن
    و در حالت حالت های خاص میخوام بین این دو فریم جابجا بشن

    برای حل این خطا باید چکار کنم؟

    • سلام
      این مورد بیشتر در زمانی پیش می آید که مشکلی در کلاس شما باشد
      مثلا در نمونه شما به جای این که شی Main کلاس را از نوع MovieClip قرار دهید از نوع Sprite قرار داده اید

      این کد صحیح یک بارگزارنده می باشد
      و در مورد سوال دیگر شماهمین کد را درون فایل LoadCode.as قرار دهید و آن را به عنوان کلاس اصلی پروژه پانل Propertise تعیین کنید
      و کدهای مربوطه به import را کلا حذف کنید

      package 
      {
      	import flash.events.Event;
      	import flash.display.Sprite;
      	import flash.display.MovieClip;
      	import flash.text.TextField;
      
      	public class LoadCode extends MovieClip
      	{
      		var total:Number = stage.loaderInfo.bytesTotal;
      		var loaded:Number = stage.loaderInfo.bytesLoaded;
      
      		public function LoadCode ()
      		{
      			stage.addEventListener (Event.ENTER_FRAME, loading);
      		}
      		private function loading (event:Event):void
      		{
      
      			mcBar.scaleX = stage.loaderInfo.bytesLoaded / stage.loaderInfo.bytesTotal;
      			var percent =Math.floor((stage.loaderInfo.bytesLoaded/stage.loaderInfo.bytesTotal)*100);
      			txLoader.text = percent+ "%";
      
      			if (stage.loaderInfo.bytesLoaded == stage.loaderInfo.bytesLoaded &&  percent>99)
      			{
      				this.nextFrame ();
      				stage.removeEventListener (Event.ENTER_FRAME, loading);
      			}
      
      		}
      
      	}
      
      }
      

      موفق و پیروز باشید

  13. با سلام.
    من فایل .as دارم و میخوام به .swf تبدیل کنم. چطور فایلهای as توی adobe flash cs6 رو میشه به swf تبدیل کرد. اصلا گزینه ی save در این زمینه توش پیدا نکردم.

  14. با سلام

    میشه یه مثال از ذخیره و آپدیت فایل xml توسط as3 بذارید؟
    من نمیتونم تغییرات رو به فایل xml اعمال کنم

    با تشکر

    • سلام
      برای فلش فقط توسط filereference می شود این کار را انجام داد که مسیر توسط پنجره محاوره ای از کاربر در خواست می شود
      برای ایر امکان این کار وجود دارد
      برای وب هم می بایست از یک زبان سمت سرور مثل php برای این کار کمک گرفته شود

      موفق و پیروز باشید

  15. سلام استاد، چطوری میشه یه سری کد که باید چندین بار نوشته بشن فقط یکبار تحت یک تابع نوشته بشن و در قسمت های بعدی اون تابع فراخوان بشه؟

    • سلام دوست عزیز
      وقتی یک تابع در Main تعریف کنید در طول پروژه در دسترس شما هست
      و نیز می توانید از خصویت Static نیز استفاده کنید
      و یا این که نمونه از آن class را new کنید و از خصوصیاتش استفاده کنید
      در کل این کار که می فرمایید در اکثر پروژه ها انجام می شود
      موفق و پیروز باشید

  16. سلام، خیلی ممنون. فقط امکانش هست یکی از این روش ها رو بصورت چند خط ارائه کنید؟

    • var loader:Loader = new Loader();
      
      loader.load(new URLRequest("video.swf")); //assign SWF url to loader
      mov_contentLoader.addChild(loader); //add loaded content to movi clip
      
      loader.unloadAndStop(); //unload all content, do some garbage cleanup
      
    • این هم یک نمونه کامل تر دیگر

      import flash.display.Loader
               
              import flash.net.URLRequest
               
              import flash.events.Event
               
             
               
              var myLoader:Loader = new Loader();
               
              myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event){
               
              addChild(myLoader);
               
              });
               
             
               
              myLoader.load(new URLRequest(&quot;item2.swf&quot;));
               
              btnUnload.addEventListener(MouseEvent.CLICK,function(){
               
              // Calling this method will unload and recursively stop the content of the movie.
               
              myLoader.unloadAndStop();
               
              }); 
      
  17. آقا دستت درد نکنه کارمو راه انداخت. با عرض پوزش یه سوال من یه کامپوننت inputbox گذاشتم و عبارات شرطی که داخلش نوشته میشن رو برنامه اجرا میکنه. اما موقعی که جاشو با inputbox تکست تولز عوض میکنم هیچکدوم از شرط ها کار نمیکن. مشکلش چیه؟

    • سلام دوست عزیز

      طبیعتا کامپوننت خصوصیاتی از پیش تعرف شده دارد که برای استفاده از فیلد متنی می بایست آنها را خودتان پیاده سازی کنید
      برای پشتیبانی از متون فارسی و راست به چپ TLF را پیشنهاد می کنم

      موفق و پیروز باشید

  18. یا اگه بشه تو همون کامپوننت سایز نوشتار و وسط و چپ و راست رو تعیین کرد هم کارم راه میوفته. اما هر چی میگردم چیز به درد بخوری پیدا نمیکنم.

  19. دمت گرم مثل همیشه توصیه هاتون خیلی خوب جواب میده

  20. ولی نمیدونم چرا برای خروجی اندروید این نوعش جواب نمیده

  21. سلام استاد، راستش اروری نمیده ولی بعضی مواقع تو سیستم کار میکنه یعنی تایپ میشه ولی شرط اجرا نمیشه بدون ارور. گاهی تو سیستم اجرا میشه کامل ولی تو گوشی نه. بعضی مواقع هم اصلا هیچی توی اینباکس ها تایپ نمیشه. ولی با حالت کلاسیک مشکل کمتری داره اما حالت tlf بیشتره

    • سلام دوست عزیز

      دقت داشته باشید که حتما در بخش actionscript setting ، بخش default linkage را روی merged into code قرار دهید
      در ضمن عرض باکس را به اندازه عرض استیج قرار دهید (در صورت امکان) در حالت فارسی TLF و زمانی که RTL فعال می شود در برخی موارد مشکلاتی با تاچ گزارش شده است که با بزرگ کردن عرض یا ایجاد دکمه ای که با تاچ آن روی فیلد فکوس شود ، مساله رفع می شود ، می توانید بعد از فکوس دکمه را مخفی کنید و در زمان لازم دوباره نمایش دهید ، برای رویدادهای TLF در وب جستجو نمایید

      موفق و پیروز باشید

  22. خیلی ممنون توضیحاتتون حسابی کار سازه.

  23. سلام
    ممنون از مطالب و راهنمایی های مفیدتون

    من یه فایل xml رو با استفاده از air تغییر دادم و ذخیره کردم
    با استفاده از این دستورات:
    var ba:ByteArray = new ByteArray ;
    ba.writeUTFBytes (xmlCustomer);

    var fr:FileReference = new FileReference();
    fr.save (ba , ‘Custom.xml’);
    اما موقع ذخیره کردن، پنجره ی Brows باز میشه
    من نمیخوام save as بشه، میخوام save بشه

    میشه راهنماییم کنید؟

    ممنون

    • سلام
      برای این کار می بایست از FileStream استفاده کنید

      var prefsFile:File = File.applicationStorageDirectory.resolvePath(&quot;iflashlord.xml&quot;);
      var stream:FileStream = new FileStream();
      stream.open(prefsFile, FileMode.WRITE);
      stream.writeUTFBytes('sample iflashlord xml data');
      stream.close();
      

      دستوری که استفاده کردید برای وقتی هست که می خواهید کاربر مسیر ذخیره را انتخاب کند

      موفق و پیروز باشید

  24. بی نهایت ممنون از راهنمایی های خوبتون

    خیلی بزرگوارید که وقت میذارید

    باز هم ممنون

  25. سلام
    میشه برای air کدی نوشت که مثلا در ساعت یا تاریخ خاصی یک notification روی دسکتاپ ظاهر بشه؟
    یا در همون قسمت پایین گوشه ی صفحه
    شبیه پیغام های آپدیت ویندوز، برای هشدار به کاربر
    حتی وقتی برنامه بسته هست

  26. سلام
    چه موقع از File.desktopDirectory.resolvePath
    و چه موقع از .applicationStorageDirectory.resolvePath
    استفاده کنیم؟

  27. سلام

    یه سوال در مورد ذخیره شدن فایل text دارم:
    من فایل رو با stream ذخیره میکنم، اما وقتی خود فایل رو باز میکنم تمام مطالبی که توی خطهای جداگانه بودند بهم چسبیدند اما وقتی دوباره از طریق خود نرم افزار بازش میکنم، خط ها رو جداگانه نمایش میده!
    راهی هست که در خود فایل هم هر خط سرجای خودش نمایش داده بشه؟

    ممنون که وقت میذارید

  28. سلام،
    چطور میشه محتویات یه سلول از دیتاگرید رو بعد از مقداردهی اولیه بهش تغییر داد؟
    و رنگ بکگراند همون سلول هم تغییر بدم

    سرچ کردم اما جوابی پیدا نکردم

    ممنون میشم راهنمایی بفرمائید

    • سلام
      برای توضیحات این کامپوننت ها به راهنمای سایت ادوبی مراجعه کنید
      در کل داده ها از ورودی dataProviderهستند و توسط arrayCollection می توانید داده ها مناسب ایجاد نمایید
      در مورد قالب امکانات از پیش تعریف شده ای با محدودیت در برخی موارد دارد که در بخش راهنمای مربوطه می توانید مشاهده کنید
      در ضمن در مورد ویرایش تا جایی که یادم می آید امکان وارد کردن و داشتن فیلد قابل ویرایش را دارد و یک رویداد هم برای زمان تغییر نیز در آن تعبیه شده است.

      به این کد هم توجه کنید

        import mx.controls.TextInput;
              import mx.events.DataGridEvent;
              import mx.events.FlexEvent;
      
      
              private var list:Array  = [];//source dataProvider
      
              protected function application1_creationCompleteHandler(event:FlexEvent):void
              {
                  list.push({name:&quot;aaaa&quot;}, {name:&quot;bbbb&quot;});
      
                  myDataGrid.dataProvider = list;
              }
      
              protected function myDataGrid_itemEditEndHandler(event:DataGridEvent):void
              {
                  // TODO Auto-generated method stub
                  var targetDataGrid:DataGrid = event.target as DataGrid;
                  var newData:String = TextInput(targetDataGrid.itemEditorInstance).text;
                  var label:String = event.dataField;
      
                  //here according to target data type in list,you may force changing type of newData, like int(newData)
                  var indexOfList:int = targetDataGrid.editedItemPosition.rowIndex;
                  list[indexOfList][label] = newData;
      
              }
      
      

      موفق و پیروز باشید

  29. سلام
    وقت بخیر

    من برای ذخیره در فایل xml به این صورت عمل کردم:
    addressMain = “D:/e/Custom.xml”;
    var file:File = File.applicationStorageDirectory.resolvePath(addressMain);
    var stream:FileStream = new FileStream ;
    stream.open (file,FileMode.WRITE);
    stream.writeUTFBytes (xmlCustomer);
    stream.close ();

    برای خروجی Air مشکلی پیش نمیاد؟
    لازمه آدرس رو تغییر بدم؟
    راه حل بهتری هست که فایل همراه با خود فایل اصلی باشه؟

    • سلام

      این تابع می تونه کار شما را راحت تر کند

      function getPath(folderName:String, fileName:String):String
      {
      	return File.applicationDirectory.resolvePath(folderName).resolvePath(fileName).nativePath;
      }
      
      var file =new File(getPath(&quot;yourfolder&quot;, &quot;custom.xml&quot;))
      
      
      

      آدرس درایو را لازم نیست وارد کنید آدرس را از محل برنامه بدهید
      مثلا اگر برنامه در D:/ هست فولدر را e و نام فایل را custom.xml وارد کنید

      موفق و پیروز باشید

  30. سلام
    وقت بخیر

    برای air نیاز به loading هست؟!

    من یه فایل ساخته بودم که تمام کدهام رو به عنوان کلاس سند معرفی کرده بودم
    حالا برای لودینگ به مشکل برخوردم: کد لودینگ رو در فریم ۱ گذاشتم، و تمام محتوای قبلی رو در فریم ۲
    و کلاس سند اصلی رو هم در فریم ۲ ایمپورت کردم و از قسمت کلاس سند حذف کردم
    بعد اینکه لودینگ کامل شد به فریم ۲ میره
    اما خطا میده که محتویات فریم ۲ رو نمیشناسه!
    تا قبل از ایمپورت کردن کلاس درست کار میکنه لودینگ، یعنی به فریم دو میره
    اما بعد ایمپورت خطا میده

    • سلام

      خطایی که داده می شود را بفرمایید

      در ضمن اگر برای وب هست از فایل دیگر برای بارگزاری استفاده کنید

      و این که توابع اصلی که در فریم ۲ اجرا می شود را در رویداد AddedToStage اضافه کنید

      موفق و پیروز باشید

  31. سلام
    وقت بخیر

    من با این دستورات در برنامه ام از یه پوشه کپی میگیرم و درست کار میکنه:
    addressMain = address + lastIndex + “-” + xmlCustomer.Customer[xmlLength]. @ name;
    var sourceDir:File = File.documentsDirectory.resolvePath(address+”sample”);
    var resultDir:File = File.documentsDirectory.resolvePath(addressMain);
    sourceDir.copyTo (resultDir);

    حالا میخوام برای حذف پوشه، اول کپی بشه توی یه پوشه به اسم delete و بعد از محل اصلی delete بشه(چون دستور cut نداشت)

    باز همون دستورات کپی رو نوشتم و بعدش دستور حذف؛ اما حتی برای کپیش هم خطا میده، میگه نمیتونه حذف کنه!!! در صورتی که من دستور کپی نوشتم! دستور حذف فعلا غیر فعال کردم

    var sourceDir:File = File.documentsDirectory.resolvePath(addressMain);
    var resultDir:File = File.documentsDirectory.resolvePath(address+”delete”);
    sourceDir.copyTo (resultDir);

    //sourceDir.deleteDirectory (true);

    لطفا راهنمایی کنید.

  32. این خطا رو میده:
    Error: Error #3012: Cannot delete file or directory.
    at flash.filesystem::File/copyTo()
    at Untitled_fla::MainTimeline/onClickTrash()[Untitled_fla.MainTimeline::frame3:384]

  33. مشکل سوالات قبلم با دستور moveTo حل شد :)
    ممنون

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

رفتن به بالای صفحه
آیا می خواهید کار با نرم افزار ادوبی فلش را بیاموزید؟
دوره جدید آموزش تخصصی ادوبی فلش!

می خواهید از زمان برگزاری دوره های آموزشی ادوبی فلش مطلع شوید؟!
می خواهید مقالات آموزشی را به صورت کامل و رایگان در ایمیل خود دریافت کنید؟

  • آموزش برنامه نویسی اکشن اسکریپت
  • آموزش بر اساس پروژه فلش برای یادگیری بهتر
  • اتصال به پایگاه داده و مدیریت محتوای فلش
  • دوره فشرده در آکادمی مجید آنلاین
عضویت در خبرنامه پادشاه فلش و دریافت مقالات و اخبار دوره ها در ایمیل

کارگاه اکشن اسکریپت ۳ در قالب پروژه وب سایت پویا – تهران



کارگاه طراحی بنر تبلیغاتی حرفه ای و جذاب فلش – تهران



با عضویت در خبرنامه پادشاه فلش علاوه بر این که مقالات آموزشی را به صورت کامل در ایمیل خود دریافت می کنید، از برگزاری دوره های آموزشی، میتینگ ها و دیگر رویدادهای مرتبط نیز از طریق ایمیل مطلع خواهید شد.
در ضمن هر زمان که بخواهید می توانید به راحتی از اشتراک خبرنامه انصراف بدهید.

بستن