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

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

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

Регистрация: Jan 2011
Сообщений: 8
По умолчанию Переопределение глобальных переменных

Уважаемые форумчане! Я новичек во Flash. Подскажите, пожалуйста, как из функции прослушивателя событий переопределить глобальные переменные?
Например, вот такой код:

Код AS3:
public class xml_loader extends Sprite {
 
	public var film:Array = new Array();
	public var time:Array = new Array();
	public var pas:Array  = new Array();
	public var xml:XML = new XML();
 
	public function xml_loader(location:String) {
		var url:URLRequest = new URLRequest(location);
		var loader:URLLoader = new URLLoader(url);
		loader.addEventListener(Event.COMPLETE, xmlLoaded);
 
		function xmlLoaded(event:Event):void {
			xml = XML(loader.data);
			for(var i = 0; i < xml.children().length(); ++i){
				time[i] = xml.children()[i].attribute("time");
				film[i] = xml.children()[i].attribute("label");
				pas[i]  = xml.children()[i].attribute("url");
			}
		}
	}	
}
Как в данном случае заполнить массивы, чтобы его потом использовать дальше в коде?


Последний раз редактировалось Hoster2010; 13.01.2011 в 15:45.
Старый 13.01.2011, 14:24
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Оформите тегами [as3]. При осмотре видно, что вы заполняете эти массивы. И заполняете после окончания загрузки. Что вас смущает?
__________________
тут я

Старый 13.01.2011, 14:48
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 3  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
они не глобальные переменные, а публичные свойства класса, которые доступны в любом месте класса
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: Jan 2011
Сообщений: 8
Мне нужно загрузить xml с внешнего источника и разбить его данные по масивам(в данном случае свойства класса). Я понимаю, что они доступны из любого места в классе. Как сделать, чтобы ф-я xmlLoaded заполнила нужные мне свойства класса, ведь передать их ей по ссылке не представляется возможным. Может, внешний xml можно загрузить другим способом без прослушки события "complete"?

Старый 13.01.2011, 15:27
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Поставьте табуляцию в коде. Вы УЖЕ грузите xml, УЖЕ забиваете паблик массивы нужным из этого xml. Судя по коду.
__________________
тут я

Старый 13.01.2011, 15:46
Hoster2010 вне форума Посмотреть профиль Отправить личное сообщение для Hoster2010 Найти все сообщения от Hoster2010
  № 6  
Ответить с цитированием
Hoster2010

Регистрация: Jan 2011
Сообщений: 8
Да, но эти данные доступны только в пределах ф-и xmlLoaded как локальные переменные, а вне ее они undefined.

Старый 13.01.2011, 15:52
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Вынесите вложенную функцию из функции. Вот теперь после форматирования это видно стало.
Код AS3:
public class xml_loader extends Sprite {
	public var film:Array = new Array();
	public var time:Array = new Array();
	public var pas:Array  = new Array();
	public var xml:XML = new XML();
 
	public function xml_loader(location:String) {
		var url:URLRequest = new URLRequest(location);
		var loader:URLLoader = new URLLoader(url);
		loader.addEventListener(Event.COMPLETE, xmlLoaded);		
	}
	private function xmlLoaded(event:Event):void {
		xml = XML(loader.data);
		for(var i = 0; i < xml.children().length(); ++i){
			time[i] = xml.children()[i].attribute("time");
			film[i] = xml.children()[i].attribute("label");
			pas[i]  = xml.children()[i].attribute("url");
		}
	}	
}
__________________
тут я

Старый 13.01.2011, 18:11
Hoster2010 вне форума Посмотреть профиль Отправить личное сообщение для Hoster2010 Найти все сообщения от Hoster2010
  № 8  
Ответить с цитированием
Hoster2010

Регистрация: Jan 2011
Сообщений: 8
Код AS3:
package {
 
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.XMLDocument;
 
 
	public class xml_loader {
		public  var film:Array = new Array();
		public  var seconds:Array = new Array();
		public  var pas:Array = new Array();
 
 
		public function xml_loader(load_from:String) {
			var url:URLRequest = new URLRequest(load_from);
			var loader:URLLoader = new URLLoader(url);
			loader.addEventListener(Event.COMPLETE, xmlLoaded);		
		}
		private function xmlLoaded(event:Event):void {
			var xml:XML = new XML(event.target.data);
			for(var i = 0; i < xml.children().length(); ++i){
				seconds[i] = xml.children()[i].attribute("time");
				film[i] = xml.children()[i].attribute("label");
				pas[i]  = xml.children()[i].attribute("url");
			}
		}			
	}
}


в другом файле

import xml_loader;
var videoData = new xml_loader("playlist.xml");
trace(videoData.pas[0]); тут пишет undefined. Почему? Подскажите, плз

Старый 13.01.2011, 18:25
Roma84 вне форума Посмотреть профиль Отправить личное сообщение для Roma84 Найти все сообщения от Roma84
  № 9  
Ответить с цитированием
Roma84
 
Аватар для Roma84

Регистрация: Apr 2008
Сообщений: 17
Код AS3:
import xml_loader;
var videoData = new xml_loader("playlist.xml");
trace(videoData.pas[0]); //undefined.
Нужно дождаться загрузки хмл, и только после этого делать trace. А так хмл просто не успевает загрузится вот и получаем undefined.

Старый 13.01.2011, 19:08
Hoster2010 вне форума Посмотреть профиль Отправить личное сообщение для Hoster2010 Найти все сообщения от Hoster2010
  № 10  
Ответить с цитированием
Hoster2010

Регистрация: Jan 2011
Сообщений: 8
Ну так в конструкторе класса это и зделано, по событию завершения загрузки, вызывается ф-я которая должна заполнить массивы. Не работает. Люди помогите)))

Добавлено через 6 минут
Извините за название темы, не знаю как поменять

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

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

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


 


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


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