Action Script 3.0 براي Action Script 2.0 كار ها

khorzu

Member
بخش اول :
خيلي وقت بود منتظر بودم سرم خلوت بشه تا يه سري به AS3 بزنم اما فرصت نشده بود . تا اينكه يه كتاب ساده راجع به اون پيدا كردم كه بدردم خورد . اينجا قراره ترجمه نكات بدرد بخور اون + بعضي تجربه هاي شخصي نوشته شه گفتم شايد به درد شما هم بخوره . مخاطب اين نوشته ها از نظر منAS2 كار ها هستند اما شايد به كار بقيه هم بياد .
قبل از هر چيز اسم منبع كه از Flazx.com قابل دانلود است :

Learning ActionScript 3.0 : A Beginner's Guide
by Rich Shupe, with Zevan Rosser:2008

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

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

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

شروع :

1- تعريف متغير ها به همون شكل AS2 است :
PHP:
var myVariable:Number = 1;
2- همچنين عملگر هاي شرطي و كنترلي :
PHP:
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- آريه ها :
PHP:
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- فانكشن ها :
PHP:
function showMsg(){
  trace("hello");
  }
  showMsg();
5- اشيا :
PHP:
var plane:Object = new Object();
  plane.pitch = 0;
  plane.roll = 5;
  plane.yaw = 5;
6- تريگر ها :
PHP:
this.mc.width;
7- تعريف جديتر مفاهيم Properties وMethods و Events:

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

PHP:
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 از اون هست .
PHP:
  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 :بدون شرح
PHP:
  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() قابل پياده سازي بود .
PHP:
  var timer:Timer = new Timer(1000);
  timer.addEventListener(TimerEvent.TIMER, onTimer);
  timer.start();
  function onTimer(evt:TimerEvent):void {  
watch.hand.rotation +=5; 
 }
 
آخرین ویرایش:

khorzu

Member
سلام . اظهار لطف شما انگیزه من رو تقویت می کنه .ممنون .
اینکه در این دنیای مجازی می تونی هر اسمی داشته باشی یک امکان غیر ممکنه واسه همین فکر میکنم خرزو می تونه توی این دنیای وارونه بهترین اسم ممکن باشه که من دوست داشته باشم شما منو با اون صدا بزنید .
 

khorzu

Member
بخش دوم :
يك مفهوم جديد واساسي : DisplayList

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

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



displayList.gif


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



displayObject.gif


يه سري توضيح براي اشياء جديدالورود :
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 است و معمولا به تايم لاين اصلي اشاره نمي كند .

در پست بعد پياده سازي اين خزعبلات تئوريك را در عمل با AS3 پي خواهيم گرفت .
 
آخرین ویرایش:

khorzu

Member
بخش سوم :چينش اجراي Display list

addChild() :
براي اضافه كردن يك display object به display list دو گام ساده نياز هست :
1:. ساختن يك display object (در مثال اينجا يك MC ) :
PHP:
var mc:MovieClip = new MovieClip();

اين دستور يك مووي كليپ مي سازه ام ، اونو نمايش نمي ده .
2:. براي نمايش اين MC بايد اونو به display list اضافه كنيم :
PHP:
addChild(mc);

اگر شما يك
displayObjectContainer داشته باشيد و بخوايد MC تون توي اون باشه مي تونيد دستور addChild() رو به صورت زير بنويسيد :
PHP:
    navBar.addChild(mc);
دو تا مثلا براي انواع ديگه display Object :
PHP:
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 رو هم فعال كنيد كنيد :

linkage.gif


در جعبه Base class كلاسي كه قراره symbol مورد نظرتون وارثش بشه رو مشخص كنيد . و حالا :
PHP:
     var cycle:MovieClip = new Unicycle(); 
  addChild(cycle);
محشره ، نه .آخر شي گراييه .
 
آخرین ویرایش:

khorzu

Member
بخش چهارم : Object-oriented programming

به طور مختصر برنامه نويسي شي گرا يك روش براي حل مسئله هاي بزرگ كه نياز به استفاده از قانون تفرقه بنداز و حكومت كن داره هست . توي اين روش مسئله بزرگ به زير مسئله هاي كوچك خرد مي شند كه ريز حلال هاي اين ريز مسائل رو مي شه با كمي مسامحه به همون اسم كلاس صدا زد .

قالب كلي يك كلاس ساده :
PHP:
  package {
       import flash.display.MovieClip;
   
       public class Main extends MovieClip {
            public function Main() {
                 trace("Flash");
            }
       }
  }
::. كلمه package كلاس و همه اجزاي مرتبط با اون رو توي خودش بسته بندي مي كنه . و البته كاربردهاي دييگه هم داره كه مي بينيم . خط دوم به اصطلاحا كامپايلر مي گه كه مي خوايم شي ما تمام متود ها ، پروپرتي ها و ايونت هاي MovieClip رو هم داشته باشه .
::. كلمه extends MovieClip استفاده از مفهوم وراثت توي بحث OOP است . وراثت يعني صرفه جويي در كد . با اين كار شما كلاس MovieClip رو توسعه مي دين بدون اينكه از محتوياتش اطلاع داشته باشيد .
حالا كد بالا رو توي پوشه فايل FLA جاري با نام Main.as ذخيره كنيد و توي فريم اول كد زير رو بنويسيد و اجرا كنيد :
PHP:
      var main:Main = new Main();
Class Paths :
براي استفاده از كلاس ها چند روش وجود داره . اول اينكه خود فلش همه فايل هاي .as داخل پوشه خودش رو به طور خودكار import مي كنه مثل مثال بالا . دوم ؛ بعضي مواقع لازم مي شه تا كلاس ها داخل پوشه ها قرار بگيرند تا دسته بندي دقيق تري انجام بشه . توي اين حال براي دسترسي به فايل هاي داخل پوشه ها براي هر پوشه از يك نقطه استفاده مي كنيم :
PHP:
       import myapp.effects.Water;
توي اين مثال ما كلاس myapp>effects>Water.as رو import مي كنيم . البته بايد توي خود Water.as هم بايد تغييراتي رو بديم :
PHP:
package myapp.effects {

     public class Water {
          public function Water() {

          }
     }
}
سوم ؛ مي شه از Publish settings هم كلاس ها رو به پروژه اضافه كرد .

يه مثلا براي تكميل و تفريح :
PHP:
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سره و تكنيك ها و خروجي هايي كه مي شه از كشيد بيرون در حد معجزه ست . دوستان اگه مي دونند كه مبحث ديگه اي هم بايد باز بشه لطفا همين جا بگن و گرنه ادامه كار توضيح تكنيك هاست كه بايد جاي ديگه اي مطرح شه ...
 
آخرین ویرایش:

khorzu

Member
::..يك توضيح ضروري :
براي اشاره كردن به اجزاي يك فايل توي AS2 معمولا از _parent , _root استفاده مي شه . توي AS3 وقتي از اين قابليت استفاده كنيد ؛ مثلا :
PHP:
parent.gotoAndStop(20);
هنگام اجرا با خطا مواجه مي شيد :

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

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

PHP:
MovieClip(parent).gotoAndStop(20);

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

robic

کاربر فعال
ایمپورت نمودن فایل اکشن اسکریپت 2 در اکشن اسکریپت 3 ، چگونه؟

در مورد اینکه آیا میشه ، به صورت اتوماتیک فایل ای اس 2 رو تو ای اس 3 ایمپورت کرد هم اگر شد توضیح بده ، ممنان میشم
 

khorzu

Member
AS2 to AS3 convertor

برای robic :
برای اجرا به جاوا ران تایم احتیاج داره و تا حالا خودم تستش نکردم چون نه حالش رو داشتم نه جاوا رو . این هم یه قسمت از ریدمیش هست > منبع :
کد:
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:\code\As2Source" "C:\code\As2Output" "C:\code\As3Output"
5.) Save it. Double-click run.bat
 

پیوست ها

  • AS2_to_AS3.zip
    5.2 کیلوبایت · بازدیدها: 71
آخرین ویرایش:

khorzu

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

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

پیوست ها

  • as3cs_migration.zip
    40.6 کیلوبایت · بازدیدها: 121
آخرین ویرایش:

sizanjavad

کاربر فعال
سلام آقا خرزو. من زیاد به این بخش سر نمی زنم. بیشتر تو بخش actionscript هستم. قصد داشتم این کتاب رو شروع کنم به ترجمش و بزارم تو اون بخش که امروز این تاپیک رو دیدم.
کاش کتاب رو جزء به جزء میذاشتی. این روندی که شما داری الان ادامه می دی. برا کسایی خوبه قبلا as2 کار بودن. یعنی نقدا داری یه قسمتاییش رو خط می کشی. در صورتی که اسم کتاب هم اینه Beginners.Guide .من حدود 100 صفحه کتاب رو خوندم. شما قسمتای آموزش ابتدایی که مشابه با as2 بود رو حذف کردی.  
من قصد دارم تو قسمت actionscript به صورت کامل کتاب رو ترجمه کنم + یه سری مثالهای اضافه بر کتاب و مطالب بیشتر. خیلی دوست دارم با هم اینکار رو انجام بدیم. چون میخوام از یه سری بچه های کاردرست دیگه انجمن هم برا کامل شدن بحث دعوت کنم تا همه با هم یه مرجع کامل و اساسی برا as3 تهیه کنیم و به عبارتی قال قضیه رو بکنیم. دیگه از بس داره خورد خورد تو انجمنای سایتای مختلف در مورد این as3 بحث میشه کم کم داره این بحث as3 برا کاربرای ایرانی شاخ میشه.
فکر می کنم اگه بتونیم این کار رو انجام بدیم یه تیم خوب بشیم که بشه در آینده بهش امیدوار بود. تو ابن انجمن کاربرای حرفه ای زیادن که میتونن علاوه بر کمک کردن به بقیه خودشون با هم ست بشن و یه تکونی به این وضع نابسامان فلش ایران بدن. البته غیر از as3 قراره یه فکرای دیگه ای هم تو کلم هست.
حتما برام پیغام بذار
 
آخرین ویرایش:

khorzu

Member
سلام
البته اسم تاپيك هم هدف منو مشخص مي كنه :Action Script 3.0 براي Action Script 2.0 كار ها

اما در مورد كل كتاب علاقه دارم ولي الان وقت امتحان هاي پايان ترمه و شديدا مشغولم ... آر هاي بهمن وقتم آزاد مي شه ... كتاب روني هست و لغت ها عجيب غريب خيلي نداره ... البته اين رو هم بگم كه Air و Flex و DirectX و PHP و 3DMAX و AfterEfect و mobile programing هم همه مباحثي هستند كه از دور به من چشمك ميزنند ...
 
آخرین ویرایش:

sizanjavad

کاربر فعال
البته اين رو هم بگم كه Air و Flex و DirectX و PHP و 3DMAX و AfterEfect و mobile programing هم همه مباحثي هستند كه از دور به من چشمك ميزنند ...
خوب این که در مورد همه ما صدق می کنه .یک دست و n تا هندونه :D
منم تو امتحاناتم بعد از انتحانا بیشتر مزاحمت میشم:cool:
 

BioDread

Banned
خورزو شاید جاش این جا نباشه ولی ...
ببین من تو timeline نم 3 تا لایه دارم!
که تو هر لایه یه مووی هست!
که مووی های من در هر لایه فرم های 5 و 10 و 15 هستن
یعنی مووی لایه سوم در فرم 15 و دوم 10 و یکم 5 هست!
که در لایه سوم یه دکمه هست که این کارو انجام میده{
مووی که در لایه دوم هست رو ببره به فرم 200
من این کد رو میزنم کار نمیکنه و به من error میده

PHP:
stage.my_mov.gotoAndStop(200)

چه جوری میشه از اول در as3 آدرس داد

مثلا در as2 این طوری بود
PHP:
_root.my_mov.gotoAndStop(200);
 

khorzu

Member
سلام
البته من 5 ماهه فقط با هشت كار مي كنم ولي اول بگو پست شماره 9 اين تاپيك رو خوندي؟
اگر با اون هم حل نشده بگو تا cs4 نصب كنم ببينم مشكل از كجاست چون الان واقعا چيزي يادم نمياد ...
در ضمن ... ميشه بگي دقيقا چه خطايي ميده ...
 

BioDread

Banned
آره خوندم
من مشکل parent ندارم

parent موقع ای استفاده میشه که داخل یه مووی باشی
ولی من در main time line هستم و دکمه من در انجا هست

اینم error

PHP:
1119: Access of possibly undefined property my_function through a reference with static type flash.display:Stage.

من هرچی به ذهنم رسید زدم ولی نشد :cry:
 

BioDread

Banned
من رفتم تو یه انجمن خارجی یه نفر منو این طوری راهنمایی کرد
تو چیزی ازش میفهمی به منم بگو

PHP:
Stage is not the object having main timeline. The root is.

Stage is like some very very global for the entire flash movie. It has the root, whose timeline is a main timeline, and whose class is a document class.

Imagine: stgae, the root is attached to it, and everything else attached to root. Generally stage can have more than 1 children. But usually you have only one - root, which is stage.getChildAt(0). Everything else is relative to root.
 

جدیدترین ارسال ها

بالا