متغییر Global

MAJOR

Well-Known Member
سلام
با تشکر از مراجعه به این تاپیک من یک مشکل با این اکشن اسریپت 3 دارم و اینم به این صورت هست من یک مقدارو از یک فایل تکست واکشی می کنم و نتیجه رو در بدونه editfild می ریزم اما وقتی که می خوام از این ادیت فیلد خارج از فانکشن استفاده کنم مقداری رو به من بر نمی گردونه با متغییر هم همین حالت وجود داره لطفا به من کمک کنید .
چگونه این مشکل رو حل کنم .
کد:
// Need to create a URL Loader called loader
var loader:URLLoader = new URLLoader();

// specify what we are loading, in this case variables
loader.dataFormat = URLLoaderDataFormat.VARIABLES;

// add an event listener to do the function when done loading
loader.addEventListener(Event.COMPLETE, varsLoaded);

// actually call the loader to load the file
loader.load(new URLRequest("data.txt"));

// set the variables from the data.txt file
function varsLoaded (event:Event):void {
	variable1.text = loader.data.var1;
	variable2.text = loader.data.var2;
	variable3.text = loader.data.var3;
	variable4.text = loader.data.var4;
}
variable4.text;


همنطور که در بالا می بینید از وریبل 1 تا 4 4 تا ادیتتکست هستند که درون فانکشن مقدار میگیرن و لی بیرون فانکشن نمیشه مقادیرشون رو از وریبل ها خوند کمک کنید متشکرم .
 

JavidFlasher

کاربر فعال
قبل از هرچي متغير هايي بيرون از تابع تعريف كن تا محدودش همواره در دسترس باشه
و تو تابع اين متغير ها رو مديريت كن يعني ديتاهات رو بريز تو متغيرت
روش دوم هم كه اگه با oopآشنايي داري ميتوني تابعت رو public كني تا تو دسرس باشه
 

++Hadi++

Active Member
سوالتون خیلی گنگه ...
اینجا دقیقا مشکل شما رو بررسی کرده ، فک کنم شما ، دستوراتتونو از اینجا ور داشتین :
http://www.projectfinale.com/viewtutorial.php?id=9
فقط موقعی می تونین به مقادیر اون متغیر های لود شده دست پیدا کنین که لود اون فایل تموم شه . با گذاشتن listener با عنوان Event.COMPLETe ، در واقع تابع varsLoaded موقعی اجرا می شه که لود فایلتون با موفقیت به پایان برسه . وگرنه نمی تونین به متغیر ا دست پیدا کنین .اگر هم متغیر هاتون با موفقیت لود شدندد .می تونین بعد از اجرای بدنه تابع varsLoaded ، تابع دیگه ای رو از داخل اون فراخونی کنین ... در غیر اینصورت بدنه اصلی اسکریپت نویسیتون ، اولین لحظه ای هست که فلشتون لود شده .
در مورد متغیر های global در اکشن 3 هم باید از کلاسهایی با مشخصه ها و متد های static استفاده کنین که آموزش اونو در آموزش اکشن 3 از صفر گذاشتم که می تونین به امضام مراجعه کنین .
 

yaa110

کاربر فعال
همونطور که جناب JavidFlasher گفتن، چند تا متغیر String خارج از تابع ایجاد کنید و اونها را مدیریت کنید. هر وقت هم که نیاز بود مقادیر اونها را وارد فیلدهای متنی کنید.
 

MAJOR

Well-Known Member
با تشکر از دوستان که جواب منو دادن ولی متاسفانه با این کار هم مشکل من حل نشد من متغیییر هم در خارج از بدنه تابعم معرفی کردم که پس از اجرای فانکشن باز متغییر ها مقدار خالی دارند .
 

MAJOR

Well-Known Member
ببخشید دوستان به اینجا یه نگاه بندازید

کد:
var str:String=' ';

function varsLoaded (event:Event):void {
	str='ali';
}

trace(str);


متغییر str در نهایت باز هم همان مقدار '' یا خالی را که در اول معرفی کردم به خود می گیرد . چه کار کنم ؟
 

++Hadi++

Active Member
عزیزم
قسمت اصلی بدنه اسکریپتتون که بیرون همه توابع باشه ، برای یک آن اول هست که فعلا هیچی لود نشده . پس طبیعی هست که در لحظه اول هیچی لود نشه و متغیرتون خالی باشه . ما در پلتفرم های برنامه نویسی با دو پاس زمانی سر و کار داریم .
1- لحظه ای که کد های تگ اصلی برای یک آن اجرا می شه .
2- زمان های مختلف
در واقع فرض کنین گزینه اول همون معادل یه تک فریم هست و گزینه دوم ، حالت ران تایم در لحظه های مختلف هست . لود شدن تکست شما در هر صورت نیاز به زمان داره چه یک ساعت چه یک میلیونیوم ثانیه. پس در لحظه اول نمی تونه لود شه و اونو نشون بده . شما چه دستورتونو بعد از تابع لود شدن بنویسین و چه قبلش ، مهم نیست . مهم ایه که هر وقت لود شد ، تابع complete اجرا می شه و بعدش متغیر مد نظرتون مقدار دهی می شه . پس شرایطی رو بوجود بیارین که بعد از کامل شدن لود شدن ، متغیرتون و تکست فیلدتون مقدار دهی بشه . وگرنه هر چی بیرون توابع بنویسین ، جزو لحظه و آن اول می شه .
اینو تست کنین :
PHP:
var loader:URLLoader = new URLLoader();
var LoadedBool:Boolean=false;
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, varsLoaded);
loader.load(new URLRequest("data.txt"));

//-------------------------------------
addEventListener(Event.ENTER_FRAME,runtime);
//---------------------------------------

function varsLoaded (event:Event):void
 {
        LoadedBool=true;
    variable1.text = loader.data.var1;
    variable2.text = loader.data.var2;
    variable3.text = loader.data.var3;
    variable4.text = loader.data.var4;
}
function runtime(evt:Event):void
{
     if(LoadedBool)
     {
           trace(variable4.text);
           removeEventListener(Event.ENTER_FRAME,runtime);
     }
}
هر لحظه که لود تموم شد ، سریعا تشخیص داده می شه و کارتون به صورت اتوماتیک تر انجام می شه .
 

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

بالا