قرار گرفتن child swf بر روی محتویات parent swf

me_gorji

New Member
با سلام و خسته نباشید خدمت دوستان
من با ()loader , addchild یک swf رو به swf اصلی اضافه کردم اما الان که اجرا کردم child swf در زیر محتویات parent swf قرار می گیره.
می خواستم ببینم چطوری میتونم موقع اجرا بیارمش روی بالاترین سطح MainTimeline قرار بگیره.
ضمنا این رو هم بگم که timeline parent خودش لایه های زیادی داره.
 

++Hadi++

Active Member
سلام
این آموزش رو می زارم چون خیلی تو انجمن به این مورد برخوردم و دیدم این مورد برای دوستان زیادی سوال شده گفتم این آموزش رو بزارم:
برای اینکه یه swf رو تو جایی اضافه کنید اولش باید یه Loader بسازید و با اون یه swf رو لود کنید و اونو addChild کنید.
اگر قراره این Loader تو مثلا یه مووی کلیپ به اسم mc اضافه شه ،باید بنویسید :
PHP:
mc.addChild(myLoader);
خوب در این حین ،اگه mc زیر لایه های دیگه تون باشه ،چون لودر هم تو اون اضافه شده ،پس ناچار زیر لایه های دیگه می افته.پس اگه Loader تو یه ظرفی (مووی کلیپ) باشه ،برا اینکه بیاد بالا باید ظرفه رو جابه جا کنید نه لودر رو.اما اگه لودر در کنار مووی کلیپ ها و لایه های دیگه هست ،باید لودر رو جا به جا کنید:
حالا برا اینکه یه displayObject رو جلو عقب ببرید (پشت اشیای دیگه یا روی اشیای دیگه بیفته) باید depth (اکشن 2) و یا Index اونو (اکشن 3) عوض کنید.راههای زیادی برا دستکار هست.ولی بهترین راهش استفاده از setChildIndex هست.یعنی اگه مثلا لودر تو یه مووی کلیپ اضافه شده و اون مووی کلیپه بین هزاران مووی کلیپ دیگه هست که همشون تو یه مووی کلیپ والدی به نام PARENTMC (مثلا) اضافه شده اند (کلی مووی کلیپ که تو PARENTMC اضافه یا addChild شدند و باید mc رو همشون بیفته) به صورت زیر استفاده کنید :
برا اینکه mc1 روی مثلا همسایه اش به نام mc2 بیفته(بابای جفتشون PARENTMC هست) باید بنویسید :
PHP:
MovieClip(PARENTMC).swapChildren(PARENTMC.mc1,PARENTMC.mc2);
و برای اینکه mc1 رو کل همسایه هاش بیفته ، باید دستور زیر رو بنویسید :
PHP:
MovieClip(PARENTMC).setChildIndex(mc1,PARENTMC.numChildren-1);
و البته می تونید mc1 رو در هر ایندکسی که خواستید به شری که اندکس مد نظر بین 0 تا تعداد بچه های کانتینر منهای یک باشه بندازید :
PHP:
MovieClip(PARENTMC).setChildIndex(mc1,5);
البته وقتی به یه شی مووی کلیپ یا Sprite خالی یه شی رو اضافه کنید ( چه به روش دستی و درگ و چه رسم شکلی در آن و چه اضافه کردن اضیایی مثل تسکت فیلد و چه اضافه کردن با addChild و ...) اون شی نمایشی می ره تو ایندکس 0 قرار می گیره.در واقع یه مووی کلیپ مثل یه ارایه هست که از خونه شماره صفر ایندکس هاشو شروع می کنه.شی بعدی تو ایندکس 1 و بعدی تو 2 و ... و شی n ام تو ایندکس n-1 قرار می گیره.پس به ظرطی می تونید ایندکس اشیای اضافه شده رو تغییر بدین که بین صفر تا تعداد اشیای داخل اون مووی کلیپ منهای 1 باشه.(PARENTMC.numChildren-1) در اینصورت ایندکس 0 ،شی رو پشت همه اشیای دیگه و ایندکس numChildren-1 جلوی همه اشیا می یاره.
دو تا سمپل هم براتون آماده کردم که دیدنشون خالی از لطف نیست :
-----------------------------------------------------------------------------
PHP:
import flash.utils.setInterval;
import flash.display.MovieClip;

var position:Boolean=false;//بولینی برای ذخیره نوبت بالا آمدن یکی از دو مووی کلیپ مذکور
var id:int=0;

id=setInterval(ChangeIndexes,1000);//هر یک ثانیه یا معادل هزار میلی ثانیه ،تابع مذکور اجرا می شود

function ChangeIndexes():void
{
    position=!position;//برعکس شدن بولین برای تغییر شیفت بالا آمدن
    if(position)
        MovieClip(MainContainer).swapChildren(MainContainer.mc1,MainContainer.mc2);
    else
        MovieClip(MainContainer).swapChildren(MainContainer.mc2,MainContainer.mc1);
}

-----------------------------------------------------------------------

PHP:
import flash.utils.setInterval;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.DisplayObject;
import flash.filters.DropShadowFilter;

    AddEvents(MainContainer.mc1);
    AddEvents(MainContainer.mc2);
    AddEvents(MainContainer.mc3);
    AddEvents(MainContainer.mc4);
    AddEvents(MainContainer.mc5);
    AddEvents(MainContainer.mc6);

function AddEvents(object:DisplayObject):void
{
    object.addEventListener(MouseEvent.MOUSE_DOWN,dragIt);
    object.addEventListener(MouseEvent.MOUSE_UP,dropIt);
}
function dragIt(evt:MouseEvent):void
{
    evt.currentTarget.startDrag();
    evt.currentTarget.filters=[new DropShadowFilter(6,45,0,0.8,8,8,2,2)];
    MovieClip(MainContainer).setChildIndex(MovieClip(evt.currentTarget),MainContainer.numChildren-1);
}
function dropIt(evt:MouseEvent):void
{
    evt.currentTarget.stopDrag();
    evt.currentTarget.filters=[];
}
 

پیوست ها

  • IndexTutorial.rar
    29 کیلوبایت · بازدیدها: 53
سلام اقا هادی ....من چند تا مووی کلیپ دام تو استیج حالا اینا رو چه جوری جلو و عقب کنم //؟؟تازه خود این مووی کلیپ ها عکس داخلشون رواز بیرون لود میکنن....من اینجوری نوشتم
[PHPS]//setChildIndex(B1,0);
setChildIndex(shora,numChildren-1);
//setChildIndex(shora,numChildren-1);
setChildIndex(bg,1);[/PHPS]
 
آخرین ویرایش:

++Hadi++

Active Member
PHP:
parentOfMovieClip.setChildIndex(TargetMovieClipName,Index);

یادت باشه Index ها از صفر تا numChildren-1 شی parent اون مووی کلیپ هست و انتخاب index صفر اونو عقب عقب می بره و هر چی index های بالاتر تا numChildren-1 بهشون بدی ،بالا و بالاتر می یان...منظور از بالا اومدن ،جلو اومدن و رو اشیای هم زاد قرار گرفتن هست.
 
سلام اقا هادی ممنون ولی شما جواب کلی دادید

منظورم اینکه وقتی چند تا مووی کلیپ دارم تو استیج واسه ترتیبش چه کدی مخواد مثلا باید بنویسم
stage.setchildrenIndex یا مثلا چیزی دیگه ای؟
 

++Hadi++

Active Member
اگه همشون تو یه فریم و کنار هم ،بچه های اصلی stage هستند ، باید با همون روشی که گفتید بنویسید...البته root هم می تونه باشه...
 

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

بالا