Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.01.2012, 11:33
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 1  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
По умолчанию Проверка загружаемых данных из XML

Итак в первом кадре загружаю XML

Код AS1/AS2:
folder_path="/right_menu_xml/";
 
rubric_name = new Array(); //Создаем массив названия рубрик
rubric_url = new Array(); //Создаем массив URL к рубрикам
 
// Загрузка названия рубрик из XML
var robric_xml = new XML(); //создаем объект XML
robric_xml.ignoreWhite = true; //Игнорируем пробелы
robric_xml.onLoad = function()
{
	var nodes0:Array = this.firstChild.childNodes; //childNodes - Массив дочерних узлов указанного объекта XMLNode. firstChild - Оценивает указанный объект XMLDocument и ссылается на первый дочерний узел в списке дочерних узлов узла-родителя.
	for(var i0=0;i0<nodes0.length;i0++)	{
		rubric_name.push(nodes0[i0].attributes.rubname); //получаем имя фотки и присваиваем их переменной photo_filename
		rubric_url.push(nodes0[i0].attributes.ruburl); //получаем имя фотки и присваиваем их переменной photo_filename
		}
	}
robric_xml.load(folder_path+"rubrics.xml"); //Указываем путь к файлу XML
во втором кадре проверяю загрузку

Код AS1/AS2:
this.onEnterFrame = function()
{
	if( robric_xml.loaded ) 
	{
		trace ("rubrics.xml загружен");
		play(); //Если файл загружен то играем дальше
	}
	else  //Если файл загружен не до конца то ждем
	{
		stop();
	}
}
Все загружается, но иногда данные задваиваются т.е. например ставятся две одинаковых картинки (в XML только одна)
Вопрос правильно ли так проверять или лучше иным способом?

Старый 18.01.2012, 11:39
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Не правильно. Зачем вам вообще эта конструкция в this.onEnterFrame ? Вообще убирайте onEnterFrame. Уже есть нормальный обработчик события robric_xml.onLoad - он, собственно, для этого и нужен - вставляйте play() после парсинга данных - после цикла for.

А stop() должен стоять в самом начале кода для первого кадра, а не вызываться с частотой кадров.
__________________
Идите первым!


Последний раз редактировалось mooncar; 18.01.2012 в 11:42.
Старый 18.01.2012, 11:57
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 3  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
т.е. по сути код во втором кадре вообще не нужен?
Просто остановить первый кадр и на onLoad поставить play, я правильно понял?
А каким образом отслеживается тогда полностью ли загрузились данные?
Или программа будет стоять в первом кадре пока все не загрузит?

Добавлено через 1 минуту
т.е. делать так?
Код AS1/AS2:
folder_path="/right_menu_xml/";
 
rubric_name = new Array(); //Создаем массив названия рубрик
rubric_url = new Array(); //Создаем массив URL к рубрикам
 
// Загрузка названия рубрик из XML
var robric_xml = new XML(); //создаем объект XML
robric_xml.ignoreWhite = true; //Игнорируем пробелы
robric_xml.onLoad = function()
{
	var nodes0:Array = this.firstChild.childNodes; //childNodes - Массив дочерних узлов указанного объекта XMLNode. firstChild - Оценивает указанный объект XMLDocument и ссылается на первый дочерний узел в списке дочерних узлов узла-родителя.
	for(var i0=0;i0<nodes0.length;i0++)	{
		rubric_name.push(nodes0[i0].attributes.rubname); //получаем имя фотки и присваиваем их переменной photo_filename
		rubric_url.push(nodes0[i0].attributes.ruburl); //получаем имя фотки и присваиваем их переменной photo_filename
		}
play();
	}
robric_xml.load(folder_path+"rubrics.xml"); //Указываем путь к файлу XML
 
stop();

Старый 18.01.2012, 12:00
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от vivado Посмотреть сообщение
т.е. по сути код во втором кадре вообще не нужен?
Просто остановить первый кадр и на onLoad поставить play, я правильно понял?
Да.
1-й кадр:

stop() - чтобы головка воспроизведения не перешла дальше. - пишем в самом начале, а не в конце.
Загрузка XML и проверка загруженности.
Обработчик события XML.onLoad - это и есть обработчик события загрузки XML-файла, а не просто какой-то контейнер для офомления парсера XML-данных.
В нем, после парсинга данных и прописать play(), то есть по готовности загрузки и разбора данных проигрываем дальше.

Идеологию понимаете? Есть события, который происходят во флешке. И мы назначаем функцию, которая должна вызваться при наступлении этого события. Код ActionScript работает асинхронно, то есть не ожидает сам по себе, когда что-то будет готово, поэтому нужно обрабатывать события, чтобы двигаться дальше по алгоритму приложения.
onLoad, onEnterFrame, onMouseMove - это названия событий. И если их приравнять анонимной функции, как это часто делают в примерах, то эти функции будут выполняться, когда эти события наступят. Потому эти функции и н-ся "обработчиками событий". Лично я предпочитаю не использовать анонимные функции, а давать обработчику ссылку на поименованную функцию, объявленную где-то в общем блоке всех функций.
__________________
Идите первым!


Последний раз редактировалось mooncar; 18.01.2012 в 12:17.
Старый 18.01.2012, 12:08
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 5  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
Да все понял, только не понял немного со stop();
разве есть разница вначале он будет или в конце, ведь по сути код сначало весь читается а потом по порядку (ну кроме функций естественно) выполняется и на stop() он должен по любому остановить кадр даже если команда будет где то в середине кода или я ошибаюсь?

Старый 18.01.2012, 12:10
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Лучше и правильнее в начале. И с т.зр. приучиться сразу так делать во избежании ошибок в будущем, да и с т.зр. алгорима.
__________________
Идите первым!

Старый 18.01.2012, 12:12
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 7  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
ок спасибо огромное за просветление, я получил +1 к интеллекту )))

Старый 18.01.2012, 12:13
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 8  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Пожалуйста
__________________
Идите первым!

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
xml , XML Loading and Save , загрузка данных
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:16.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.