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

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

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

Регистрация: Feb 2010
Сообщений: 102
Attention как правильно отследить событие совершающееся в другом классе

Столкнулся с такой вот проблемой. Есть у меня один класс Objects.as в котором я создаю какие то объекты, и есть там слушатели, при нажатии на один объект они передают в ф-цию другого класса XMLLoad.as определённую строку, которая является адресом по которому хранится xml, и вот собственно после того как у меня задгрузится этот xml файл, мне надо совершить определённые манипуляции с объектами в Objects.as.
Мне понятно как это должно выглядеть в одном классе, но как сделать это когда у меня имеется два класса. Может мне надо по окончании загрузки вернуть какую то логическую переменную? Или вообще как это сделать по правилам ООП, то есть передать в экземпляр класса XMLLoad.as адресс по которому хранится xml загрузить его, произвести определённые манипуляции с загруженными данными и потом вернутся к тому моменту где мне надо сделать что то с объектами в Objects.as Слёзно прошу помощи!

Старый 09.07.2010, 01:47
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Ссылку киньте в один класс на другой.
И это... код то покажите, что толку столько текста писать.

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

Регистрация: Feb 2010
Сообщений: 102
Objects.as
Код AS3:
.....
private var xml:XMLLoad=new XMLLoad();
........
//здесь создаём объекты(на сцену они добавляются в другом классе)
public function chooseLanguage():void
{
	for (var i:int=0; i<3; i++)
	{
		langPrimArray[i]=new Cube({width:400, height:100, depth:50});
		langPrimArray[i].y=150+(-i*150);
		langPrimArray[i].cubeMaterials=cubeData;
		langPrimCont.addChild(langPrimArray[i]);
	}
        //вешаем слушатели на созданные объекты
	langPrimCont.addOnMouseOver(addOnMouseOver_langPrimCont);
	langPrimCont.addOnMouseOut(addOnMouseOut_langPrimCont);
	langPrimCont.addOnMouseDown(addOnMouseDown_langPrimCont);
}
 
private function addOnMouseOver_langPrimCont(e:MouseEvent3D):void
{
	var object:Object3D=e.object;
	tweenFunc(object, object.x, object.y, 100, object.rotationX, object.rotationY, object.rotationZ, 1, 0, "easeOutSine");
}
 
private function addOnMouseOut_langPrimCont(e:MouseEvent3D):void
{
	var object:Object3D=e.object;
	tweenFunc(object, object.x, object.y, 0, object.rotationX, object.rotationY, object.rotationZ, 1, 0, "easeOutBounce");
}
 
private function addOnMouseDown_langPrimCont(e:MouseEvent3D):void
{
       var url:String=new String();
       var object:Object3D=e.object;
       if (langPrimCont.children.indexOf(object)==0)
       {
	      url="data/xml/English_Menu.xml";
       }
       if (langPrimCont.children.indexOf(object)==1)
       {
	       url="data/xml/Russian_Menu.xml";
       }
       if (langPrimCont.children.indexOf(object)==2)
       {
	       url="data/xml/Ukranian_Menu.xml";
       }
xml.loadingXML(url);
}
 
/*******************************************************************************
* а здесь мне надо выполнить некии манипуляции надо объектом после того как загрузится xml файл *
********************************************************************************/
 
 
private function tweenFunc(object:Object3D, x:int, y:int, z:int, rotX:int, rotY:int, rotZ:int, time:Number, delay:Number, effect:String):void
{
	Tweener.addTween(object, {x:x, y:y, z:z, rotationX:rotX, rotationY:rotY, rotationZ:rotZ, time:time, delay:delay, transition:effect});
}
XMLLoad.as
Код AS3:
...............
public function loadingXML(url:String):void
{
	xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);
	xmlLoader.addEventListener(ProgressEvent.PROGRESS, xmlProgressFunc);
	xmlLoader.load(new URLRequest(url));
}
 
private function xmlLoadedFunc(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, xmlLoadedFunc);
	xmlData=new XML(e.target.data);
	xmlList=xmlData.children();
}
private function xmlProgressFunc(e:ProgressEvent):void
{
	var percentage:Number=(e.bytesLoaded/e.bytesTotal)*100;
}

Старый 09.07.2010, 11:39
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 4  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
т.е тебе надо дождать загрузки xml В XMLLoad и после этого сделать что-то в Objects. Тогда всё просто:
XMLLoad.as
Код AS3:
private function xmlLoadedFunc(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, xmlLoadedFunc);
	xmlData=new XML(e.target.data);
	xmlList=xmlData.children();
           dispatchEvent(new Event(Event.COMLETE));  //или можно создать свой ивент и в него ещё чего-нибудь положить
}
в конструкторе Objects
Код AS3:
public function Objects()
{
  xml.addEventListener(Event.COMPLETE /*или свой ивент*/, onXmlLoad);
}
 
private function onXmlLoad(event: Event /*или свой ивент*/): void
{
  //сделать что-то с XML
}

Старый 09.07.2010, 11:58
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 5  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
ну в общем да, только у меня флекс ругается на строку
Код AS3:
dispatchEvent(new Event(Event.COMLETE));
Вызов предположительно неопределённого метода dispatchEvent

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

Регистрация: Oct 2006
Адрес: Кисловодск
Сообщений: 192
Отправить сообщение для Diestro с помощью ICQ
Цитата:
Сообщение от metsys Посмотреть сообщение
ну в общем да, только у меня флекс ругается на строку
Код AS3:
dispatchEvent(new Event(Event.COMLETE));
Вызов предположительно неопределённого метода dispatchEvent
Нужно отнаследоваться от EventDispatcher
__________________
blog.diestro.ru

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

Регистрация: Feb 2010
Сообщений: 102
объясните нубу пожалуйста что это и как?

Добавлено через 8 минут
я не совсем понял что значит отнаследоватся, и как это должно выглядеть в коде, если можно напишите, и ещё, а корректно ли сдлать так:

XMLLoad.as
Код AS3:
...............
public var xmlLoader:URLLoader=new URLLoader();
..............................
public function loadingXML(url:String):void
{
	xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);
	xmlLoader.addEventListener(ProgressEvent.PROGRESS, xmlProgressFunc);
	xmlLoader.load(new URLRequest(url));
}
 
private function xmlLoadedFunc(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, xmlLoadedFunc);
	xmlData=new XML(e.target.data);
	xmlList=xmlData.children();
}
private function xmlProgressFunc(e:ProgressEvent):void
{
	var percentage:Number=(e.bytesLoaded/e.bytesTotal)*100;
}
Objects.as
Код AS3:
public function Objects()
{
  xml.xmlLoader.addEventListener(Event.COMPLETE, onXmlLoad);
}
 
private function onXmlLoad(event:Event): void
{
  //делаю что то с объектами созданными в этом классе
}

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

Регистрация: Oct 2006
Адрес: Кисловодск
Сообщений: 192
Отправить сообщение для Diestro с помощью ICQ
в классе
XMLLoad.as нужно написать:
Код AS3:
public class XMLLoad extends EventDispatcher
вместо
Код AS3:
public class XMLLoad
__________________
blog.diestro.ru

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

Регистрация: Feb 2010
Сообщений: 102
не работает

Добавлено через 2 минуты
вот код Objects.as
Код AS3:
package
{
	import away3d.containers.ObjectContainer3D;
	import away3d.core.base.Object3D;
	import away3d.events.MouseEvent3D;
	import away3d.primitives.Cube;
	import away3d.primitives.Trident;
	import away3d.primitives.data.CubeMaterialsData;
 
	import caurina.transitions.Tweener;
 
	import flash.events.Event;
 
	public class Objects
	{
		public var xml:XMLLoad=new XMLLoad();
 
		private var langPrimArray:Array=new Array();
		public var langPrimCont:ObjectContainer3D=new ObjectContainer3D();
 
		public var _doska:Cube;
		public var _axis:Trident;
 
		private var cubeData:CubeMaterialsData=new CubeMaterialsData({left:'black', right:'black', top:'black', bottom:'black', back:'black'});
 
		public function Objects()
		{
 
		}
 
		public function chooseLanguage():void
		{
			for (var i:int=0; i<3; i++)
			{
				langPrimArray[i]=new Cube({width:400, height:100, depth:50});
				langPrimArray[i].y=150+(-i*150);
				langPrimArray[i].cubeMaterials=cubeData;
				langPrimCont.addChild(langPrimArray[i]);
			}
			langPrimCont.addOnMouseOver(addOnMouseOver_langPrimCont);
			langPrimCont.addOnMouseOut(addOnMouseOut_langPrimCont);
			langPrimCont.addOnMouseDown(addOnMouseDown_langPrimCont);
		}
 
		private function addOnMouseOver_langPrimCont(e:MouseEvent3D):void
		{
			var object:Object3D=e.object;
			tweenFunc(object, object.x, object.y, 100, object.rotationX, object.rotationY, object.rotationZ, 1, 0, "easeOutSine");
		}
 
		private function addOnMouseOut_langPrimCont(e:MouseEvent3D):void
		{
			var object:Object3D=e.object;
			tweenFunc(object, object.x, object.y, 0, object.rotationX, object.rotationY, object.rotationZ, 1, 0, "easeOutBounce");
		}
 
		private function addOnMouseDown_langPrimCont(e:MouseEvent3D):void
		{
			var url:String=new String();
			var object:Object3D=e.object;
			if (langPrimCont.children.indexOf(object)==0)
			{
				url="data/xml/English_Menu.xml";
           	}
           	if (langPrimCont.children.indexOf(object)==1)
           	{
           		url="data/xml/Russian_Menu.xml";
           	}
           	if (langPrimCont.children.indexOf(object)==2)
           	{
           		url="data/xml/Ukranian_Menu.xml";
           	}
           	xml.loadingXML(url);
           	xml.addEventListener(Event.COMPLETE, onXMLLoaded);
		}
 
		private function onXMLLoaded(e:Event):void
		{
			e.target.removeOnMouseDown(addOnMouseDown_langPrimCont);
           	e.target.removeOnMouseOver(addOnMouseOver_langPrimCont);
           	langPrimCont.addOnMouseDown(addOnMouseDown_Option);
 
           	tweenFunc(langPrimCont, langPrimCont.x, langPrimCont.y, 300, langPrimCont.rotationX, 180, langPrimCont.rotationZ, 3, 0, "easeOutSine");
		}
 
		private function addOnMouseDown_Option(e:MouseEvent3D):void
		{
			e.target.removeOnMouseOut(addOnMouseOut_langPrimCont);
			e.target.removeOnMouseDown(addOnMouseDown_Option);
			var object:Object3D=e.object;
			tweenFunc(object, object.x, 0, object.z, 180, object.rotationY, object.rotationZ, 1.5, 0, "easeOutSine");
			var i:int=0;
			var j:Number=1;
			for (i; i<3; i++)
			{
				if (langPrimCont.children.indexOf(object) != i)
				{
					tweenFunc(langPrimArray[i], j*1500, langPrimArray[i].y, langPrimArray[i].z, langPrimArray[i].rotationX, langPrimArray[i].rotationY, langPrimArray[i].rotationZ, 2, 0, "easeOutSine")
					j*=-1;
				}
			}
		}
 
		public function doskaFunc():void
		{
			_doska=new Cube({width:601, depth:601, height:20});
 
			_axis=new Trident(350);
		}
 
		private function tweenFunc(object:Object3D, x:int, y:int, z:int, rotX:int, rotY:int, rotZ:int, time:Number, delay:Number, effect:String):void
		{
			Tweener.addTween(object, {x:x, y:y, z:z, rotationX:rotX, rotationY:rotY, rotationZ:rotZ, time:time, delay:delay, transition:effect});
		}
	}
}
вот код XMLLoad.as
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.ProgressEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	public class XMLLoad extends EventDispatcher
	{
		//--XML--
		public var xmlLoader:URLLoader=new URLLoader();
		private var xmlList:XMLList;
		private var xmlData:XML;
 
		//public var objects:Objects=new Objects();
		//public var comboBoxArray:ArrayCollection=new ArrayCollection();
 
		public function XMLLoad()
		{
		}
 
		public function loadingXML(url:String):void
		{
			xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);
			xmlLoader.addEventListener(ProgressEvent.PROGRESS, xmlProgressFunc);
			xmlLoader.load(new URLRequest(url));
		}
 
		private function xmlLoadedFunc(e:Event):void
		{
			e.target.removeEventListener(Event.COMPLETE, xmlLoadedFunc);
			xmlData=new XML(e.target.data);
			xmlList=xmlData.children();
			dispatchEvent(new Event(Event.COMPLETE));
		}
 
		private function xmlProgressFunc(e:ProgressEvent):void
		{
			var percentage:Number=(e.bytesLoaded/e.bytesTotal)*100;
		}
	}
}
Добавлено через 11 минут
вопросов нету я ступил, ответ получил, спасибо)

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

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

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


 


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


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