Показать сообщение отдельно
Старый 20.07.2011, 14:22
Kidd002 вне форума Посмотреть профиль Отправить личное сообщение для Kidd002 Посетить домашнюю страницу Kidd002 Найти все сообщения от Kidd002
  № 2  
Ответить с цитированием
Kidd002

Регистрация: Apr 2004
Адрес: Россия, Москва
Сообщений: 60
Отправить сообщение для Kidd002 с помощью ICQ
Например можно наследоваться от EventDispatcher и отправлять событие при завершении работы парсера.
Парсер:
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	[Event(name="complete", type="flash.events.Event")]
	public class xmlpars extends EventDispatcher
	{
		private var _xml:XML;
		public var objlist:Array;
		public var camlist:Array;
 
		public function xmlpars()
		{
 
		}
 
		public function parse(url:String):void
		{
			objlist = new Array();
			camlist = new Array();
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest(url));
			loader.addEventListener(Event.COMPLETE, loadXML);
		}
 
		private function loadXML(e:Event):void
		{
			_xml = new XML(e.target.data);
			trace(_xml);
			parseXML();
		}
 
		private function parseMyObj(obj:XMLList):void
		{
			var texturearr:Array = new Array();
			var textureobjarr:Array = new Array();
			var objtext:Array = new Array();
			for (var i:Number = 0; i < obj.length(); i++)
			{
				var object:Object = obj[i];
				for (var q:Number = 0; q < object.textures.texture.length(); q++)
				{
					var t:Object = object.textures.texture[q];
					texturearr.push(t.texturesrc);
 
					textureobjarr.push(t.textureobj);
					objtext.push(t.text);
				}
				var s:objItem = new objItem(object.name, object.model, texturearr, textureobjarr, object.@x, object.@y, object.@z, objtext);
				objlist.push(s);
			}
		}
 
		private function parseMyCam(obj:XMLList):void
		{
			for (var i:Number = 0; i < obj.length(); i++)
			{
				var object:Object = obj[i];
				var s:camItem = new camItem(object.name, object.@farClipping, object.@nearClipping, object.@posx, object.@posy, object.@posz, object.@lookx, object.@looky, object.@lookz);
				camlist.push(s);
			}
		}
 
		private function parseXML():void
		{
			var objects:XMLList = _xml["objects"].child("object");
			parseMyObj(objects);
			var cameras:XMLList = _xml["cameras"].child("camera");
			parseMyCam(cameras);
 
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}
Использование:
Код AS3:
urlXml:String=new String("fgdag.xml");
 
private function onContextCreate()
{
	//....
	pars:xmlparser=new xmlparser();
	pars.addEventListener(Event.COMPLETE, onParceComplete);
	pars.parse(urlXml);
 
}
 
private function onParceComplete(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, onParceComplete);
 
	//тут производится создание объектов MyObject с помощью данных из массива объектов 
	//и добавляются на сцену
 
	//Тоже самое с камерой
	addEventListner(.....,onenterframe);
}
Также можно использовать коллбэки.