دسترسی به داخل swfلود شده ؟

amirnen

New Member
درود
من یک مووی کلیپ رو به طریق زیر ایجاد و داخلش یک فایل swf رو لود کردم .
PHP Code:

var animation:MovieClip=new MovieClip(); addChild(animation); animation.x=100; animation.y=100; var i:Loader =new Loader(); i.load(new URLRequest("testlod.swf")); animation.addChild(i);



حالا می خوام به totalFrames یا CurrentFrame فایل لود شده که همون SWF من هست دسترسی پیدا کنم و بدونم چند تا فریم داره و یا به چیز های دیگه هر چی نوشتم نشد .میخواستم اگر میشه من رو راهنمایی کنید .
سپاس:?:
 

amirnen

New Member
درود به دوستان .
یعنی این مسئله اینقدر مشکله که 128 نفر اومدن داخل ولی یکی نتونسته جوابشو بده یا من نتونستم خوب مسئله رو ارائه بدم . :shock:
 

++Hadi++

Active Member
البته این یه تست اولیه هست ولی تو تست اولیه اینو فهمیدم که با توجه به کد زیر نمی شه در حین لود فهمید مقدار فریم های تایم لاین چقدره چون شی content هنوز آماده نشده.کد زیر :
PHP:
import flash.display.Loader;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.display.MovieClip;

var loader:Loader=new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,comp);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,err);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressing);

loader.load(new URLRequest("Child.swf"));

function comp(evt:Event):void
{
    loader.width=loader.height=50;
    trace(MovieClip(loader.content).totalFrames);//OK
}
function err(evt:IOErrorEvent):void
{
    trace("Error");
}
function progressing(evt:ProgressEvent):void
{
    trace(loader.contentLoaderInfo.bytesLoaded+"/"+loader.contentLoaderInfo.bytesTotal);
    trace(MovieClip(loader.content).totalFrames);//Error
}
 

amirnen

New Member
درود ممون از پاسخ شما
ولی این دستور مقدار totalFrame رو 1 بر میگردونه انگار یک mc درست شده باشه و داخلش یک فریم داشته باشیم . اون مقداری که بتونه total frame و .... واقعی فایل لود شده رو برگردونه فکر میکنم این نیست .
در ضمن شما روش جایگزین برای رویداد onReleaseOutside به فکرتون می رسه .این فکر کنم از اون حذفیات مسخره Adobe بوده . البته خیلی کارهای مسخره دیگه توAS3 انجام داده یکشم اینه ( البته این نظر منه ) :mad:
 

++Hadi++

Active Member
عرض کردم با تحقیقات نه چندان زیادی که داشتم فهمیدم امکان نداره تعداد فریم های وقعی یه swf رو تو root اون در زمان لود فهمید...مگر اینکه تو stackOverFlow و ActionScript.org و ... بررسی کنید و درش بیارید...
در ضمن onReleaseOutside فکر می کنم منظور از این دستور همون ترکیب دو رویداد هست.در واقع اینجوریه :
PHP:
mc.onReleaseOutside=function(){}
==
PHP:
//coding By ++Hadi++
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.Sprite;

//
var mc:Sprite=new Sprite();
mc.graphics.beginFill(0xff2222,1);
mc.graphics.drawRect(100,100,50,100);
mc.graphics.endFill();
this.addChild(mc);



var TouchBool:Boolean=false;
mc.addEventListener(MouseEvent.MOUSE_OVER,over);
mc.addEventListener(MouseEvent.MOUSE_OUT,out);


function over(evt:MouseEvent):void
{
    stage.removeEventListener(MouseEvent.CLICK,clicking);
    TouchBool=true;
}
function out(evt:MouseEvent):void
{
    if(TouchBool)
    {
        stage.addEventListener(MouseEvent.CLICK,clicking);
        TouchBool=false;
    }
}
function clicking(evt:MouseEvent):void
{
    if(!TouchBool)
    {
        //do anything
        trace("Mouse Out Release");
        stage.removeEventListener(MouseEvent.CLICK,clicking);
    }
}
از نظر بنده اکشن 3 خیلی خوش دست تره و با اکشن 2 قابل مقایسه نیست و البته درسته یه سری کلاسهای اکشن 2 تو 3 حذف شده ولی قابلیت های خوبی رو برا کد نویسی استاندارد و درست می ده...در این مورد درسته مورد خواست شما قبلا یه خطی بود ولی الان با تجذیه اون به دو رویداد می شه گفت باعث شده فرد بتونه جزئیات زیادی رو داشته باشه تا محدودیت کمتر بشه...کد نویسی اکشن 3 برا خلاصه نویسی نیست بلکه برا درست و استاندارد نویسی با محدودیات کمه....موفق باشید...
 

amirnen

New Member
هادی جان با بخش هایی از حرف های شما موافقم مثل کد نویسی استاندارد و ... ولی اجازه بدید با قسمت هایی از حرف های شما موافق نباشم چرا که بعضی از تغییرات در اون بیهوده بوده و کار رو چرخونده و ...
حالا ....
در مورد کد دسترسی به خصیصه های فایل لود شده این کد جواب داد که در زیر قرارش میدم .

فرقش با کد شما در زمان فراخوانی رویداد لود کامل است .


PHP Code:

var animation:MovieClip=new MovieClip(); addChild(animation); animation.x=100; animation.y=100; var loader:Loader =new Loader(); loader.load(new URLRequest("myfile.swf")); animation.addChild(loader); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completed); function completed(e:Event) { trace(MovieClip(loader.content).totalFrames); }

موفق باشید .
 

aliamel

کاربر فعال
دوست گرامی 128 که هیچ. حتی اگه تعداد مشاهده کننده سوال شما 1280 نفر باشه بازم دلیل نمیشه که همگی این افراد فلش کار هستند.حتی اگر کسی هم جواب نده دلیل نمیشه که کسی بلد نیست.
به نظر من هادی خان به درستی به سوال شما پاسخ دادن و شما جواب کامل رو دریافت کردید.

هادی جان جهت تکمیل اطلاعاتت به نگاهی به رویداد Event.INIT بنداز و می دونم خیلی برات مفید خواهد بود.
 
آخرین ویرایش:

++Hadi++

Active Member
init بیشتر به راه اندازی یا آماده شده یه چیزی گفته م شه...برخی وقتها تو بعضی جریانان تو اکشن 2 و ... با complete شدن ،فقط لودش تموم می شه و با init شدن ،آماده بهره برداری می شه...بهره برداری معمولا بعد از کامل شدنه ...ولی تو اکشن 3 به جز مواردی خاص خیلی به دردم نخورده چون مشکلم معمولا با complete شدن حل شده...در کل مرسی ...ما به داشتن دوستان با سوادی همچون شما افتخار می کنیم ...با تشکر...
 

aliamel

کاربر فعال
مرسی هادی جان ولی اونقدرا هم که فکر می کنی باسواد نیستم.
هادی جان فکر کنم یه کوچولو بیشتر باید توجه کنی.
توضیح شو نمیدم فقط سر فرصت دو رویداد COMPLETE و INIT رو توی یک مثال استفاده کن و ببین کدوم یکی زودتر dispatch می شه و چرا؟
 

++Hadi++

Active Member
مطالب فوق رو تو اکشن 3 تست نکردم بلکه همین امروز تو اکشن 2 وقتی یه movieclipLoader رو ساختم تا چیزی رو لود کنه ،دو تا موردش برام کاربرد داشت :eek:nComplete و onInit و البته فقط در مورد onInit اندازه های _width و _height رو می داد که البته فک کردم init عدش اجرا می شه.البته شاید درست نفهمیدم...چون همیشه با complete مشکلاتم حل می شد و نیازی به init نداشتم...
 

aliamel

کاربر فعال
هادی خان INIT مخفف کلمه initialize هست و زود تر از COMPLETE اجرا میشه. به عبارت دیگه نیاز نیست منتظر لود کامل فایل اکسترنال باشیم و در واقع زمانی دیس پچ میشه که بتونه به Property ها ومتد های اولیه از فایل اکسترنال دسترسی پیدا کنه.
با این فرض رویداد COPMLETE مشابه INIT هست و زمانی که فایل به طور کامل لود شد میشه به عناصر اون فایل اکسترنال دسترسی داشت.
 

spryboy

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

دوست عزیز ایونت RELEASE_OUTSIDE از فلش پلیر 11.3 و ایر 3.3 دوباره اضافه شده. اگر از فلش CS6ـــه آپدیت شده استفاده میکنید که مشکلی ندارید، چون فلش پلیر 11.4 رو ساپورت میکنه. اگر به خاطر حجم بالا نمیتونید فلش رو آپدیت کنید، خودتون میتونید خروجی برای فلش پلیر جدید رو به صورت دستی اضافه کنید. اینجـــــا و اینجـــــا رو ببینید.

امیدوارم کمک کرده باشم.

موفق باشید
 

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

بالا