![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
Столкнулся с такой вот проблемой. Есть у меня один класс Objects.as в котором я создаю какие то объекты, и есть там слушатели, при нажатии на один объект они передают в ф-цию другого класса XMLLoad.as определённую строку, которая является адресом по которому хранится xml, и вот собственно после того как у меня задгрузится этот xml файл, мне надо совершить определённые манипуляции с объектами в Objects.as.
Мне понятно как это должно выглядеть в одном классе, но как сделать это когда у меня имеется два класса. Может мне надо по окончании загрузки вернуть какую то логическую переменную? Или вообще как это сделать по правилам ООП, то есть передать в экземпляр класса XMLLoad.as адресс по которому хранится xml загрузить его, произвести определённые манипуляции с загруженными данными и потом вернутся к тому моменту где мне надо сделать что то с объектами в Objects.as Слёзно прошу помощи! |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Ссылку киньте в один класс на другой.
И это... код то покажите, что толку столько текста писать. |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
Objects.as
..... 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}); } ............... 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; } |
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
т.е тебе надо дождать загрузки xml В XMLLoad и после этого сделать что-то в Objects. Тогда всё просто:
XMLLoad.as 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)); //или можно создать свой ивент и в него ещё чего-нибудь положить } |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
ну в общем да, только у меня флекс ругается на строку
Вызов предположительно неопределённого метода dispatchEvent |
|
|||||
|
Нужно отнаследоваться от EventDispatcher
__________________
blog.diestro.ru |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
объясните нубу пожалуйста что это и как?
Добавлено через 8 минут я не совсем понял что значит отнаследоватся, и как это должно выглядеть в коде, если можно напишите, и ещё, а корректно ли сдлать так: XMLLoad.as ............... 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; } |
|
|||||
|
в классе
XMLLoad.as нужно написать: вместо
__________________
blog.diestro.ru |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
не работает
Добавлено через 2 минуты вот код Objects.as 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}); } } } 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; } } } вопросов нету я ступил, ответ получил, спасибо) |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|