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

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

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

Регистрация: Nov 2006
Сообщений: 253
По умолчанию передача переменной между классами

Всем привет, знаю, что тема не впервые здесь выкладывается. Пересмотрел все, пробовал, но у меня ничего не получаеться. Не знаю как передать значение из одного класса в другой.
Вот код:

Код:
public class XMLLoader extends MovieClip {

		public var maxx:Number;
		public var maxi:Number;
		public var thumbs:Array = new Array();
		public var pics:Array = new Array();
		public var descs:Array = new Array();
		private var novel:XML;
		private var urlLoader:URLLoader;


		public function XMLLoader( ) {




			var urlRequest:URLRequest = new URLRequest("data/xmlphoto.xml");

			urlLoader = new URLLoader( );
			urlLoader.addEventListener(Event.COMPLETE, completeListener);

			urlLoader.load(urlRequest);

		}

		public function completeListener(e:Event):void {




			var gallery:XML = new XML(e.target.data);

			this.maxx = gallery.photo.length(); // эту переменную надо передать
			
			var i:Number;
			for (i=0; i < gallery.photo.length(); i++) {
				this.thumbs.push(gallery.photo[i].tmb);
				this.pics.push(gallery.photo[i].img);
				this.descs.push(gallery.photo[i].desc);

				trace(" Image: "+ pics[i]);
				trace(" Thumb: "+ thumbs[i]);
				trace(" Description: "+ descs[i]);

				/*массивы тоже передать надо*/
			}
		}
	}
Переменную maxx надо передать в следующий класс

Код:
public class Test extends MovieClip{
     public var testInfo:int;

     public function Test() {
           var n:News = new News();
		   var XMLLoaded:XMLLoader = new XMLLoader();
		    trace("Maxx:   " + XMLLoaded.maxi);//выводит NAN

     }
}
Подскажите, что я не так делаю. Заранее спасибо
__________________
Living with the smile

Старый 21.05.2008, 07:56
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Обращение к переменной происходит сразу после создания экземпляра класса, а она в это время ещё не определена, так как событие окончания загрузки происходит значительно позже.

Я бы здесь либо отправлял событие окончания загрузки из XMLLoader'a, либо из его собственного обработчика дёргал нужный объект и передавал ему переменную (которой может быть например объект с набором параметров)
__________________
тонкий тролль, осеянный благодатью

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

Регистрация: Nov 2006
Сообщений: 253
я только начинаю AS3, можете привести простой пример.
__________________
Living with the smile

Старый 21.05.2008, 12:40
vooparker вне форума Посмотреть профиль Отправить личное сообщение для vooparker Посетить домашнюю страницу vooparker Найти все сообщения от vooparker
  № 4  
Ответить с цитированием
vooparker
 
Аватар для vooparker

Регистрация: Apr 2006
Адрес: Kursk, Russia
Сообщений: 523
Отправить сообщение для vooparker с помощью ICQ
Можно пойти двумя путями - push и poll. Выбирая poll мы шлем событие XMLLoader'ом что все готово, а кому нужно "опрашивает" XMLLoader на предмет интересующей информации.
XMLLoader
Код:
public function completeListener(e:Event):void {
	var gallery:XML = new XML(e.target.data);

	this.maxx = gallery.photo.length(); // эту переменную надо передать
			
	...

	dispatchEvent(new Event(Event.COMPLETE));
}
Test
Код:
public class Test extends MovieClip{
     public var testInfo:int;

     public function Test() {
        var n:News = new News();
	var xmlLoaded:XMLLoader = new XMLLoader();
	xmlLoaded.addEventListener(Event.COMPLETE, onXMLComplete);

     }
     
     private function onXMLComplete (event:Event):void
     {
           var loader:XMLLoader = event.target as XMLLoader
           trace("Maxi: " + loader.maxi);
           // подобным образом читаем и наши массивы
     }
}
В случае с push, мы все необходимые данные сохраняем в объекте события и передаем вместе с ним же. Для этого нам потребуется создать наследника класса Event, скажем XMLLoaderEvent, с необходимыми свойствами и разослать его в качестве события.

Тогда код в XMLLoader может быть примерно таким:
Код:
public function completeListener(e:Event):void {
	...
        var event:XMLLoaderEvent = new XMLLoaderEvent(Event.COMPLETE);
        event.maxi = this.maxi;

        // сюда же можно засунуть и массивы

	dispatchEvent(event);
}
Теперь в обработчике в Test:
Код:
     private function onXMLComplete (event:XMLLoaderEvent):void
     {
           trace("Maxi: " + event.maxi);
           ...
     }
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE

Старый 21.05.2008, 13:10
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 5  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
vooparker, выдает следущую ошибку :

1046: Type was not found or was not a compile-time constant: XMLLoaderEvent.
__________________
Living with the smile

Старый 21.05.2008, 13:24
vooparker вне форума Посмотреть профиль Отправить личное сообщение для vooparker Посетить домашнюю страницу vooparker Найти все сообщения от vooparker
  № 6  
Ответить с цитированием
vooparker
 
Аватар для vooparker

Регистрация: Apr 2006
Адрес: Kursk, Russia
Сообщений: 523
Отправить сообщение для vooparker с помощью ICQ
Цитата:
Сообщение от Ar4ibald Посмотреть сообщение
vooparker, выдает следущую ошибку :

1046: Type was not found or was not a compile-time constant: XMLLoaderEvent.
Пропустил главное :

Цитата:
Для этого нам потребуется создать наследника класса Event, скажем XMLLoaderEvent
Ну в самом простом варианте он может выглядеть так:
Код:
package
{
	import flash.events.Event;

	public class XMLLoaderEvent extends Event
	{
		public var maxi:Number;
		
		public function XMLLoaderEvent(type:String)
		{
			super(type);
		}
	}
}
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE

Старый 21.05.2008, 16:03
Ar4ibald вне форума Посмотреть профиль Отправить личное сообщение для Ar4ibald Найти все сообщения от Ar4ibald
  № 7  
Ответить с цитированием
Ar4ibald
 
Аватар для Ar4ibald

Регистрация: Nov 2006
Сообщений: 253
опять что-то не так

TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@2e282e1 to main.XMLLoaderEvent.
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at main::XMLLoader/completeListener()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader:nComplete()
__________________
Living with the smile

Старый 21.05.2008, 16:09
vooparker вне форума Посмотреть профиль Отправить личное сообщение для vooparker Посетить домашнюю страницу vooparker Найти все сообщения от vooparker
  № 8  
Ответить с цитированием
vooparker
 
Аватар для vooparker

Регистрация: Apr 2006
Адрес: Kursk, Russia
Сообщений: 523
Отправить сообщение для vooparker с помощью ICQ
давай код
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE

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

Регистрация: Nov 2006
Сообщений: 253
в данном коде использую первый принцып

тут переменная выдает NAN
Вложения
Тип файла: rar AS3.rar (5.9 Кб, 67 просмотров)
__________________
Living with the smile

Старый 21.05.2008, 17:56
vooparker вне форума Посмотреть профиль Отправить личное сообщение для vooparker Посетить домашнюю страницу vooparker Найти все сообщения от vooparker
  № 10  
Ответить с цитированием
vooparker
 
Аватар для vooparker

Регистрация: Apr 2006
Адрес: Kursk, Russia
Сообщений: 523
Отправить сообщение для vooparker с помощью ICQ
у тебя в коде каша из двух предложенных вариантов, поэтому и не работает. Плюс немного путаницы вносит именование свойств (maxx, maxi), при этом не понятно что они означают. Переделал твой пример под второй вариант. Единственно что дописал к классу события переопределенный метод clone, который создает точную копию текущего объекта события, собственно в твоем примере работать будет и без него, но на будущее запомни что у всех собственных объектов событий этот метод должен присутствовать и возвращать точную копию.

а про события почитай, это одна из основ программирования на as3
Вложения
Тип файла: zip xphoto.zip (6.7 Кб, 102 просмотров)
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE

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

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

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


 


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


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