راهنمایی برای حل مشکل در As2

mohan21

Member
با سلام خدمت دوستان

من با استفاده از کد زیر (as2) اطلاعات رو از xml میخونم، تا اینجا مشکلی نیست، اما من میخوام در بیرون از تابع buildData به آرایه های DataTextArray و DataImageArray دسترسی داشته باشم.

اما نمیشه؛ در منطقه دو که بیرون از تابع هست، undefined میزنه و در منطقه 1 (داخل تابع هست) عمل میکنه.

چکار باید کنم؟

کد:
var DataImageArray:Array = new Array();
    var DataTextArray:Array  = new Array();

/*****************************************/// Load Xml

    var mainData:XML = new XML ();
    mainData.ignoreWhite = true;
    mainData.onLoad = buildData;
    mainData.load ("data.xml");

    function buildData (success:Boolean):Void
    {
        if (success)
        {
            var allData:XMLNode = mainData.firstChild;
            var allDataTotal:Number = allData.childNodes.length;

            var i:Number;

            for (i=0 ; i < allDataTotal ; i++)
            {
                DataTextArray  [i] = allData.childNodes[i].childNodes[0].firstChild.nodeValue;
                DataImageArray [i] = allData.childNodes[i].childNodes[1].firstChild.nodeValue;
            }

            //text_test.text = DataImageArray[0];    //------- Mantaqe 1
        }
    }

    //text_test.text = DataImageArray[0];    //------- Mantaqe 2

/*****************************************/// End Load Xml
 

++Hadi++

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

PHP:
var DataImageArray:Array = new Array();
    var DataTextArray:Array  = new Array();

/*****************************************/// Load Xml

    var mainData:XML = new XML ();
    mainData.ignoreWhite = true;
    mainData.onLoad = buildData;
    mainData.load ("data.xml");

    function buildData (success:Boolean):Void
    {
        if (success)
        {
            var allData:XMLNode = mainData.firstChild;
            var allDataTotal:Number = allData.childNodes.length;

            var i:Number;

            for (i=0 ; i < allDataTotal ; i++)
            {
                DataTextArray  [i] = allData.childNodes[i].childNodes[0].firstChild.nodeValue;
                DataImageArray [i] = allData.childNodes[i].childNodes[1].firstChild.nodeValue;
            }

            //text_test.text = DataImageArray[0];    //------- Mantaqe 1
        }
        Function2();
    }
function Function2():void
{
    
    //text_test.text = DataImageArray[0];    //------- Mantaqe 2
} 


/*****************************************/// End Load Xml
 

mohan21

Member
من سه لایه دارم:

1. لایه اصلی:
شامل سه بخش- فریم ها به سه بخش تقسیم شده اند:::
- یکی خواندن فایل xml و قرار دادن محتوا در آرایه
- دومی کد های نمایش متن و تصویر با توجه به مقادیر آرایه (frame lanbel: start)
- بخش آخر هم کنترل و افزایش شمارنده و رفتن به start

2. نمایش متن
3. نمایش تصویر

کد فوق در لایه اصلی، بخش اول قرار میگیره و در بخش دوم از مقادیر آرایه استفاده میشه و دیگر به بخش اول بر نمیگردیم.

پس باید کاری کنیم تا بتونیم از آرایه ها استفاده کنیم ....

چطور ؟؟

این راه شما جوابگوی این مشکل نیست ...

خواهشاً راهنمایی بفرمائید ...
 

mohan21

Member
مشکل حل شد

چه جالب ....

کد اولیه من جواب میده، به این صورت که، طبق گفته های پست قبلی، اگر کد زیر رو ::

PHP:
text_test.text = DataImageArray[0]

در فریم اصلی بخش اول قرار بدیم، undefined میده، اما در بخش دیگری(من در بخش دوم از فریم اصلی قرار دادم) قرار بدیم مشکلی پیش نمی آید ....
 

++Hadi++

Active Member
من فکر کردم همگی کد ها در یک فریم باید نوشته بشه .
یعنی منظورتون اینه که کدهاتون در یک زمان مشخص ، در یک لایه نوشته نشده ؟
اگه آره من دلیلی رو نمی بینم که شما در چند لایه مختلف از یه مووی کلیپ ، کد های اکشن رو قرار بدین که همگی در یک زمان و در یک فریم باید اجرا بشند .
اگه نه ، کد هایی که در یک لایه نوشته می شند ، قابل دسترسی در فریم های بعدی هستند . یعنی وقتی متغیر یا تابعی رو در فریم مثلا اول می نویسید و بهش مقدار خاصی رو می دین ، این تابع یا متغیر در فریم دوم یا n ام از همون لایه هم قابل دسترسی (با مقادیرشون ) هست .

فرض کن قراره متغیر ایکسمل ، فایل ایکسمل رو در فریم 1 کاملا بخونه و در فریم 20 مثلا به مقدار اون دست پیدا کنید و از اون استفاده کنه . خوب در این شرایط شما اول در فریم اول تماما اون ایکسمل رو می خونین و در متد onLoad که همون تابع builtdata هست ، بعد از مقدار دهی به متغیر ها و غیره ، دستور می دین که مثلا به فریم 10 بره و بعد از اون دیگه می تونین در فریم 10 از اون لایه ، به مقادیر ایکسمل دست پیدا کنین و از اون استفاده کنین . چون که مقادیر متغیر ها در یک لایه از نوع internal یا داخلی هست . اگر هم قراره مثلا در همون فریم اول به یه دکمه event رو اختصاص بدین که با کلیک بر روی اون ، مثلا به فریم 10 بره و از ایکسمل در اونجا استفاده کنه ، باید صبر کنید و اون event رو به دکمه ندین و بعد از اینکه متد builtDat اجرا شد (و ایکسملتون به طور کامل لود شد ) درون این تابع به اون دکمه event رو بدین که از الان به بعد می تونه با کلیک بر روی این دکمه ، مثلا به فریم 10 بره چرا که الان دیگه ایکسمل لود شده .
همینطور می تونی در اکشن 2 ، متغیر ایکسملتو از نوع global_ تعریف کنی و به اون مقدار دهی کنی و بعد از اجرای تابع builtDat ، هر جایی از سورست داخل هر مووی کلیپ یا دکمه یا هر تایم لاینی که خواستی ، به اون دست پیدا کنی و اونو یا تغییر بدی یا بخونیش ... البته این در شرایطی هست که حوزه دسترسی شما دیگه قراره سراسری و عمومی بشه و می خواهین بعد از اجرای متد builtDat ، دیگه هر جا که خواستین با صدا زدن متغیر یا متد سراسریتون (ایکسمل) بهش دست پیدا کنید .
موفق باشی ...
 

mohan21

Member
در تصویر زیر مشاهده می کنید که لایه action به سه قسمت تقسیم شده است، توضیحات در بالا امده که چی هستند ....

01.jpg



---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------

اما مشکل جدیدم با farsi Style هست ....

مشکل در قطعه کد زیر هست:

PHP:
    GetText = DataTextArray [current] ;

    myFSText.setText (XmlText,GetText,10);
    myFSText.onComplete = function (ConvertedText:String)
    {
        XmlText.text = ConvertedText;
    };

    XmlText.text = myFSText.resize (XmlText);

وقتی بار اول اجرا میشه، مشکلی پیش نمیآد، ولی در دور دوم ... با مشکل روبرو میشه و قفل میکنه ....

فکر کنم مشکل پیش آمده از
PHP:
myFSText.setText (XmlText,GetText,10);
هست، فقط یکبار میشه استفاده کرد ....

حال من که از آرایه مقادیر رو میخونم و این قطعه کد بارها اجرا میشه، چکار باید انجام بدم تا به مشکل بر نخورم؟ (متن های متفاوتی باید نمایش داده شوند.)
 

++Hadi++

Active Member
مقدار متن تکست فیلد رو یه بار خالی کنین و بعد دوباره با فارسی استایل مقدار بدین . البته من با اکشن 2 اصلا کار نکردم و دقیقا نمی دونم ولی بهتره اینو از آقا مرتضی unknownuser بپرسین . بالای انجمن فلش توی تایپیک های مهم ، فارسی استایل رو پیدا کنین .
بای...
 

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

بالا