دسترسی به متغیر در عمقی متفاوت

سلام خدمت دوستان محترم
من می خوام بدونم آیا امکان داره که وقتی در شاخه root هستی بتونی به متغیری که در یک شاخه دیگر قرار دارد دسترسی داشته باشیم؟و بالعکس
فرض کنید در فریم اصلی یک موی کلیپ تعریف کرده ایم و در timeLine این movieClip یک سری کد داریم و یکسری متغیر .حالا می خوام در کد داخل mc به مقادیر متغیر root دسترسی داشته باشم و یا بالعکس
 

CMAX

Member
Some Things About Variables in AS

بعضی سوالها ارزش یک تاپیک جداگانه رو داره و به صورت کلی تنها بعضی سوالها ارزش پاسخ دادن دارن

بگذریم ...

variable یا همون متغییر در فلش خیلی ساختار پیچیده و سخت گیرانه ای رو نداره و در هر جای Time line و
در هر MC شما هر چی نوشتین با یه علامت مساوی و فلش به عنوان متغییر و یا Object در نظر می گیره اما نکته اینجاست که چطور به اینا دست رسی پیدا کنیم

تعریف متغیر
برای تعریف متغییر حتما از " var " کنید
زمانی که متغییری بدون تعیین مقدار اولیه تعریف شود مقدار آن undefined خواهد بود و برای فلش این عبارت
با "false" برابر است .
در صورتی که نوع data مشخص نشود در زمان Compile فلش سعی می کند از روی نوع data سمت راست
نوع اطلاعات متغییر را حدس بزند . سعی کنید حتما نوع متغییر را همان ابتدا تعریف کنید
کد:
var name:String="CMAX"
در این صورت امکان استفاده از Hint یا code completion فلش خواهد بود و درصد اشتباه در برنامه نویسی رو
پایین خواهد آورد .

متغیر Local
زمانی که شما متغییری رو در خود Time Line و در Root تعریف کنید این متغییر در هر کجای Time Line و در خود
Root قابل دسترسی است و همینطور در داخل یک MC هم متغییری که در Time Line تعریف شده در داخل اون
MC و با فراخوانی نامش قابل دست رسی ست
اما در صورتی که بخواهید از یک MC تغییری را در Root فرا بخوانید و بلعکس باید نام Local را به Compiler فلش
بدهیم دقیقا مثل زمانی کهبه MC های درون یک MC با دادن نام MC مادر و یا Local دسترسی پیدا می کنیم

تعریق متغییر در Root
var city:String ="Shiraz"
فراخوانی از MC
کد:
trace (_root.city)
و یا تعریف درMC و فراخوانی از Root
کد:
trace (MC.city)

متغییر Global
"global property_" خاصیتی است که شما به یک متغییر می دهید و امکان دستیابی به آن را در همه نقاط SWF
خواهید داشت مثلا
کد:
_global.Kent=true
کد:
_global.Tea=_root.Coffee
برای تعریف متغییر Global از عبارت var نباید استفاده کنید در صورت استفاده با Syntax error مواجه خواهید شد .
این متغییر در هر جایی به همین صورت قابل دست رسی است مثلا در داخل یک MC
کد:
  if (_global.Kent)
{
	trace("May Be Some Other Time");
}

خاصیت global_ تنها برای متغیر نیست و برای تابع و Object و Array و غیره قابل استفاده است
مثلا

کد:
_global.getSeason = function(n:Number)
{
	if (n == 8)
	{
		return ("Worst Season");
	}
	else if (n>8)
	{
		return ("Lovely Season");
	}
	else
	{
		return ("Busy Season");
	}
};


حالا اینجوری هرکجا که خواستید فراخوانی کنید

کد:
trace (getSeason(8))







نکته : در صورت امکان از این خاصیت کم تر استفاده کنید و از همان تعرف Local استفاده کنید

در صورتی که بتوانید خوب با متغییر ها کار کنید می تواید به راحتی بسیاری از مشکلات برنامه نویسی خودتون رو حل کنید فقط مهم اینه که تلاش کنید تا یاد بگیرید و بعد درست استفاده کنید



















و
 

CMAX

Member
خوب شاید از نظر شما اینجور باشه اما به نظر من هر سوالی ارزش پاسخ دادن نداره و مطمئنا خیلی ها هم
اینجوری فکر می کنند و اینجوری عمل می کنند و امیدوارم شما این قضیه رو بخاطر جنسیت و شخصیت طرف
فرض نکرده باشید اگر چه بعضی ها حتی جنبه جواب دادن به سوالهاشون رو هم ندارن و تازه وقتی جواب دادی
فقط میگن : اهان و خیلی ها هم راحت تر : آهان راست میگی خودم تو هلپ دیده بودم ... و الی الآخر

بحث سر این قضیه است که سوالی که پرسیده شده درست گفته شده و یک موضوعی باشه که جای بحث داشته
باشه و فقط همین که خیلی ها هنوز تو gotoandplay موندن و زحمت یک سرچ کوچولو رو هم به خودشون نی دن و کاش حداقل می دونستن چطور سوال کنند تا آخر سر که طرف متفاوت جواب داد طلبکار نشن .

امیدوارم فقط به کسی بر نخوره ...


No Pain , No Gain
 

smmousazadeh

Well-Known Member
برای دسترسی به یک متغییر باید محل تعریف و جایی که اولین مقدار رو به آن میدهیم ( مثل root یا داخل یه movieclip ) یا همون مسیر متغییر رو بدونیم .
مثلا
root.a=1
root.myMC.a=1
بصورت پیش فرض متغییرها سراسری هستند و نوعشان (int یا string و....) در زمان اجرا مشخص میشود
(از دید من ) برای موارد خاص نوع تعریف شود بهتر است
 

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

بالا