Изменение корневых переменных при отключении функции в AS 3 - PullRequest
1 голос
/ 02 апреля 2012

Я новичок в ActionScript 3, только начал работать с ним после нескольких лет работы с AS2,

На данный момент я пытаюсь изменить переменную, расположенную в корне, сфункция,

Примерно так:

var myVariable:String = "String test";

function testFunction():void
{
 myVariable = "new String";
}

Я знаю, что это проблематично, я пытался много гуглить об этом, о методах получения и установки, глобальных переменных и тому подобное, ноУ меня все еще проблемы с этим, я был бы рад понять, почему это не работает и как на самом деле это сделать.

Спасибо

РЕДАКТИРОВАТЬ: я пытаюсь загрузитьXML-файл со списком книг, я посмотрел вокруг и нашел эту функцию, попытался настроить ее на работу, но я не могу заставить ее работать, я могу загрузить XML и фактически прочитать информацию из него, ноЯ пытался установить глобальный массив или что-то подобное, чтобы я мог получить доступ к данным позже,

вот код:

var books:XML = loadBooks();
trace(books); //Returns a blank output

function loadBooks():XML {
    var xmlLoader:URLLoader = new URLLoader();
    var xmlData:XML = new XML();
    xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
    xmlLoader.load(new URLRequest("bookList.xml"));

    function LoadXML(e:Event):void {
    xmlData = new XML(e.target.data);
    trace(xmlData); //Returns what I want to have
    }

    return xmlData;
}

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Ваша проблема вызвана асинхронной природой загрузки в AS3. В вашей функции loadBooks вы настраиваете прослушиватель для обнаружения события завершения загрузки, но ваш код на этом не останавливается. Он весело продолжается, пока идет загрузка, а это означает, что вы на самом деле возвращаете пустой объект XML.

Вот как вы должны это сделать:

//define the variable in wide scope
var books:XML;
//start the load operation
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, onLoadXML);
xmlLoader.load(new URLRequest("bookList.xml"));
//event handler for load complete
function onLoadXML(evt:Event):void
{
    //clean up the listener
    xmlLoader.removeEventListener(Event.COMPLETE, onLoadXML);
    //assign the XML to your books object
    books = new XML(e.target.data);
    trace(books);
    //call a function to use the loaded data
    readBooks();
}

function readBooks():void
{
    ...
}

Как только ваше приложение станет зависимым от результатов операции загрузки, вам нужно будет дождаться события загрузки, и обработчик этого события вызовет следующий шаг в выполнении вашей программы. Я проиллюстрировал это с помощью функции readBooks.

Вы также можете обернуть фактическую операцию загрузки в функцию, но оставьте функцию загрузки и обработчик событий раздельными.

Кроме того, по соглашению имена функций должны начинаться со строчной буквы, поэтому я соответствующим образом переименовал вашу функцию-обработчик.

0 голосов
/ 02 апреля 2012

вместо root для обращения к сцене, as3 изменил связь обратно:

MovieClip(parent).nestedMovieClip;

Вышеприведенное относится к переменным aswell

var bob:int = 0;
MovieClip(parent.parent).bob = 3;

внутри фрагмента ролика: обратный вызовна родительский или на корень / стадию эта переменная изменена :: теперь bob = 3,

, вышеописанное будет работать, любые проблемы google "as3 root в as3:;

или еще дайте нам знатьдайте мне ваш код, и я буду работать для вас.

...