[حل شده] توی AS3 چطور می شه نام movie clip ها رو گرفت و عدد جلوشون رو استخراج کرد؟

شروع موضوع توسط animations ‏28 سپتامبر 2014 در انجمن Action Script 3

  1. animations

    animations Active Member

    ارسال‌ها:
    1,454
    تشکر شده:
    5,535
    امتیاز دستاورد:
    36
    سلام دوستان. من یه برنامه دارم که توش 30 تا دکمه داره با نامهای cartBG_mc01 ، cartBG_mc02 ، cartBG_mc03 الی آخر...

    می خوام وقتی کاربر روی هر کدوم از این دکمه ها کلیک کرد،یه مووی کلیپ اصلی به اسم cartBG_mc بره به فریمی که مربوط به خودشه.
    یعنی مثلا وقتی روی cartBG_mc01 کلیک شد، cartBG_mc بره روی فریم 1. وقتی روی cartBG_mc02 کلیک شد، cartBG_mc بره روی فریم 2 ...


    خودم یه اسکریپت نوشتم که درست کار می کنه، ولی باید 30 دفعه برای هر دکمه اینها رو بنویسم؟

    راهی وجود نداره که اسکریپت کوتاه تر بشه؟


    کد (Text):

    [LEFT]this.draggerMC.content_mc.cartBG_mc01.addEventListener(MouseEvent.CLICK, this.changeBG1);

    function changeBG1 (e:MouseEvent):void{
        this.cartBG_mc.gotoAndStop(1);
    }


    this.draggerMC.content_mc.cartBG_mc02.addEventListener(MouseEvent.CLICK, this.changeBG2);

    function changeBG2 (e:MouseEvent):void{
        this.cartBG_mc.gotoAndStop(2);
    }


    \\ سی مرتبه !
    [/LEFT]
     
     
    نوشته شده توسط animations در ‏28 سپتامبر 2014
  2. akherat

    akherat مدیر انجمن

    ارسال‌ها:
    594
    تشکر شده:
    661
    امتیاز دستاورد:
    93
    سلام الی
    باید اول اسم موی کیپ رو هندل کنی یعتی
    cartBG_mc الان تعداد کاراکترش 8 تاس - این عدد ثابتت هست فقط با کمو زیاد شدن اعداد جلوش که تعداد کاراکتر ها عوض میشه
    حالا بیا حساب کن که اعداد از کجا شروع میشه از اونجا اعداد رو با subString در بیار مثلا میگی از کاراکتر 8 به بعد هرچی تو اسم باشه عدد هست
    وقتی مثلا 04 رو استخراج کردی باید تبدیلش کنی به 4 یعتی عدد صحیح قابل خوندن برای تایم لاین باشه برای این کار هم به کار ساده میشه کرد یعنی این
    "04".split("0").join("");
    بعد عدد رو به int تبدیل کن

    برای اینکه 30 مرتبه کد رو تکرار نکنی
    بیا یه loop به تعداد دکمه هات بنویس و listener رو با اسم داینامیک بده بهش
    اینطوری
    this["cartBG_mc0"+i].addEventListener(MouseEvent.CLICK, this.changeAllcartBGClickHandler);

    در کد بالا loop کمتر از 10 هست بیشتر بشه اررور خواهد داد
    برای هندل کردنش باید i رو حساب کنی که اگر 2 رقمی شد دیگه اون 0 رو نزاره
     
    نوشته شده توسط akherat در ‏28 سپتامبر 2014
    animations و BehrouzPc از این پست تشکر کرده اند.
  3. animations

    animations Active Member

    ارسال‌ها:
    1,454
    تشکر شده:
    5,535
    امتیاز دستاورد:
    36
    ممنون آخرت جان. می رم که انجامش بدم، اگه نتونستم دوباره مزاحم می شم.

    کلی تشکر. :rose:
     
    نوشته شده توسط animations در ‏28 سپتامبر 2014
    akherat از این پست تشکر کرده است.
  4. animations

    animations Active Member

    ارسال‌ها:
    1,454
    تشکر شده:
    5,535
    امتیاز دستاورد:
    36
    آقا، من نتونستم اسم رو بصورت داینامیک استفاده کنم.

    یه fla ساده تمرینی آپلود کردم.
    الان مگه نباید cartBG_mc02 روی فریم 2 استاپ بشه؟ :sad:
     

    پیوست ها:

    • test.zip
      اندازه فایل:
      کیلوبایت 7
      نمایش ها:
      3
    نوشته شده توسط animations در ‏28 سپتامبر 2014
  5. akherat

    akherat مدیر انجمن

    ارسال‌ها:
    594
    تشکر شده:
    661
    امتیاز دستاورد:
    93
    [JSS]

    import flash.events.MouseEvent;
    import flash.display.MovieClip;


    // khodaye man parantez gozashtam? na khodayee? baw copy past kon :D
    var countOfButtons:int = 2;
    var baseButtonName:String = "cartBG_mc";


    function onClickHandler(e:MouseEvent)
    {
    var frameNumber:int = int(((e.currentTarget.name as String).substr(9)).split("0").join(""));
    (e.currentTarget as MovieClip).gotoAndStop(frameNumber);
    }


    for(var i:int = 0 ; i<countOfButtons ; i++)
    {

    this[baseButtonName+"0"+(i+1)].addEventListener(MouseEvent.CLICK , onClickHandler);
    }



    [/JSS]
     
    نوشته شده توسط akherat در ‏28 سپتامبر 2014
    animations از این پست تشکر کرده است.
  6. animations

    animations Active Member

    ارسال‌ها:
    1,454
    تشکر شده:
    5,535
    امتیاز دستاورد:
    36
    مرسی آقا، کلی شرمنده کردی. :rose:

    اون پرانتز رو هم ببخشید، فکر کردم شاید توفیقی حاصل بشه، برنامه کار کنه. :eye:
     
    نوشته شده توسط animations در ‏28 سپتامبر 2014
    akherat از این پست تشکر کرده است.
  7. nip

    nip New Member

    ارسال‌ها:
    5
    تشکر شده:
    4
    امتیاز دستاورد:
    1
    از این هم میتونی استفاده کنی .

    به جای this آدرس موی کلیپ و به جای "bt" اسم موی کلیپ.

    var btid:Number;

    this.btid = Number(this.name.replace("bt",""));
     
    نوشته شده توسط nip در ‏3 دسامبر 2014

به اشتراک بگذارید