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

animations

Active Member
سلام دوستان. من یه برنامه دارم که توش 30 تا دکمه داره با نامهای cartBG_mc01 ، cartBG_mc02 ، cartBG_mc03 الی آخر...

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


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

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


کد:
[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]
 

akherat

مدیر انجمن
سلام الی
باید اول اسم موی کیپ رو هندل کنی یعتی
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 رو نزاره
 

animations

Active Member
ممنون آخرت جان. می رم که انجامش بدم، اگه نتونستم دوباره مزاحم می شم.

کلی تشکر. :rose:
 

animations

Active Member
آقا، من نتونستم اسم رو بصورت داینامیک استفاده کنم.

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

پیوست ها

  • test.zip
    7 کیلوبایت · بازدیدها: 3

akherat

مدیر انجمن
[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]
 

animations

Active Member
مرسی آقا، کلی شرمنده کردی. :rose:

اون پرانتز رو هم ببخشید، فکر کردم شاید توفیقی حاصل بشه، برنامه کار کنه. :eye:
 

nip

New Member
از این هم میتونی استفاده کنی .

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

var btid:Number;

this.btid = Number(this.name.replace("bt",""));
 

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

بالا