![]() |
Проблемы с масивом
У меня возникла проблема с массивом...
//Заполнение массива данными из XML файла var my_xml:XML = new XML(); var xml_array:Array = new Array(); var i:Number; var j:Number; my_xml.ignoreWhite = true; //my_xml.load("c:/XML/xml2.xml"); my_xml.load("http://localhost/xml2.php"); my_xml.onLoad = function() { for (j=1; j<4; j++) { for (i=1; i<4; i++) { xml_array[j, i] = {id:my_xml.childNodes[0].childNodes[j-1].childNodes[i-1].childNodes[0].nodeValue}; //trace(my_xml.childNodes[0].childNodes[j].childNodes[i].childNodes[0].nodeValue); trace(xml_array[j, i].id); } } } //Отображение фигуры в зависимости от значения в массиве if (xml_array[1, 1].id == 0) { my_color = new Color(this.podstan_1); my_color.setRGB(0xFF0000); } else { my_color = new Color(this.podstan_1); my_color.setRGB(0x00FF99); } trace (xml_array[1,2].id); Так вот после выхода из функции onLoad, массива не существует... Надо ли массив объявлять как глобальный? Если да, то как? |
сделай его в руте и заполняй его из onLoad как
_root.xml_array[j, i] все переменные, что заданы в корне кадра (не в каком нибудь мувике) - считаются глобальными. глобальные переменные существуют в течении одного кадра, если хочешь чтобы они были везде - растяни кадр на столько на сколько тебе нужно. * так было в flash mx, может в 7-ке и 8-ке что-нибудь могло измениться. |
да, изменилось... в 8-ке если один раз задать в корне переменную она видна из любого кадра :)
|
Цитата:
Цитата:
|
Чувак, факт есть факт, а у кого какие понятия - зависит от распальцовки ;)
|
Цитата:
|
уже ушел.. не догонишь
|
|
Цитата:
обращение к двухмерному массиву осуществляется так xml_array[j][i] |
Странно, но почему-то у меня на заполнение массива такого формата xml_array[j][i] выдает ошибку, а вот формат xml_array[j, i] работает нормально без всяких проблем. И заполняется и выводится.
Плиз... Прошу... Ответьте конкретней, что мне надо сделать, что бы массив читалься вне функции? Заранее благодарен. |
xml_array = [];
xml_array[2, 1] = 5; xml_array[1] = 6; trace (xml_array[2, 1]); trace (xml_array[1]); trace (xml_array[2]); ////////// trace ("--------------") ////////// xml_array = []; xml_array[2] = []; xml_array[2][0] = 4; xml_array[2][1] = 5; trace (xml_array[2]); trace (xml_array[2][1]); |
:) приколист
|
Цитата:
и все... |
И еще про двухмерные массивы:
если тебе надо создать xml_array[i][j] то после задания xml_array как массива xml_array = [] нужно элемент xml_array[i] тоже сделать массивом xml_array[i] = [] ну а трехмерный соответственно так xml_array[i][j] = [] и будет xml_array[i][j][k] = "что то тут" |
во флэше нету многомерных массивов, есть массивы ОДНОМЕРНЫЕ, многомерные эмулируются же таким образом, что элемент массива, сам является массивом
то бишь Код:
var a:Array = new Array (); |
var my_xml:XML = new XML();
var xml_array:Array = new Array(); my_xml.ignoreWhite = true; my_xml.load("http://localhost/xml2.php"); my_xml.onLoad = function(){ for (j=1; j<4; j++){ xml_array[j] = new Array(); for (i=1; i<4; i++) { xml_array[j][i] = {id:my_xml.childNodes[0].childNodes[j-1].childNodes[i-1].childNodes[0].nodeValue}; trace(xml_array[j][i].id); } } } if (xml_array[1][1].id == 0) { my_color = new Color(this.podstan_1); my_color.setRGB(0xFF0000); } else { my_color = new Color(this.podstan_1); my_color.setRGB(0x00FF99); } trace(xml_array[1][2].id); Как там с обработкой ХМЛ-я не знаю, но с массивом, по идее, нужно так... |
ААААА!!! Сорри за повторение уже сказанного - не заметил вторую страницу :D
|
Объявить глобальную так можно?
_global.xml_array:Array = new Array(); У меня синтаксическая ошибка... |
нет, строгая типизация для _global не работает
надо так _global.xml_array = new Array(); |
тебе же ЭкшенСкриптовским языком написали!!! Используй абсолютную адресацию (_root _level0 _global)
и вообще зачем делать массив из xml-ки? можно же сразу брать значения из нод. |
правильно что ошибка, сам посмотри что ты написал?! ты объявляешь переменную у объекта _global, при этом указываешь тип переменной, при этом не пишешь var :) короче напиши просто
_global.xml_array = new Array (); |
Цитата:
|
Зачем по сто раз обращатся в XML, если один раз заполнил массив и с ним можно работать постоянно. Таа..а..к щаз попробуем...
|
Цитата:
|
Цитата:
если понял, то хорошо. |
Не палит....
_global.xml_array = new Array(); var my_xml:XML = new XML(); my_xml.ignoreWhite = true; my_xml.load("http://localhost/xml2.php"); my_xml.onLoad = function() { k=1; for (j=1; j<3; j++) { for (i=1; i<3; i++) { xml_array[k] = {id:my_xml.childNodes[0].childNodes[j].childNodes[i].childNodes[0].nodeValue}; k++; } } }; for (i=1; i<10; i++) { trace(xml_array[i].id); } |
Цитата:
а к масиву ты будешь обращяться столько же раз и многомерные массивы имеют свойство тормозить вобщем вырабатывай свой стиль |
Уже один массив... и тот не палит... :(
Помогите...please! |
а так?
xml_array[k] = {id:this.childNodes[0].childNodes[j].childNodes[i].childNodes[0].nodeValue}; |
дык если человек боиться xml? он ООП вообще испугаеться :)
|
Массив то оно заполняет....ну именно в функции... а вне ф-ции не выводит...пишет андифинет. Такое ощущение что сначало выполняется вывод массива, а потом только ф-ция...
|
_global.xml_array = new Array();
var my_xml:XML = new XML(); my_xml.ignoreWhite = true; my_xml.load("http://localhost/xml2.php"); my_xml.onLoad = function() { k=1; for (j=1; j<3; j++) { for (i=1; i<3; i++) { _global.xml_array[k] = {id:my_xml.childNodes[0].childNodes[j].childNodes[i].childNodes[0].nodeValue}; k++; } } }; for (i=1; i<10; i++) { trace(_global.xml_array[i].id); } смотри выше поправленное |
ох... во флэше загрузка асинхронная, загрузку ждать надо, для этого onLoad и существует
|
Неа... Не работает...
|
дай свой xml который грузиться
|
точно :) надо дождаться загрузки :)
|
Вот XML который получается:
<?xml version="1.0" encoding="windows-1251" ?> - <d> - <data1> <x>2</x> <y>0</y> <z>1</z> </data1> - <data2> <x>1</x> <y>2</y> <z>3</z> </data2> - <data3> <x>2</x> <y>0</y> <z>0</z> </data3> </d> |
Цитата:
что вот для этого кода (который он пишет вне onLoad в том же кадре) Код:
for (i=1; i<10; i++) { |
Вот и я так думаю. Т.к. андифинет выводит раньше, чем заполняется массив.
Так как же всё таки дождаться загрузки ф-ции, а уж потом выводить массив на экран? |
и с такой структурой ты делаешь доп массив?
ладно, делай setInterval или onEnterFrame и проверяй переменную значение которой меняй по окончании заполнения массива |
| Часовой пояс GMT +4, время: 15:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.