Korchy (korchy) wrote,
Korchy
korchy

Как создать класс по его текстовому имени

Набор объектов в сцене очень удобно описывать в XML-формате, а затем генерировать их в сцене динамически. В общем случае описание сцены будет выглядеть, как нечто подобное:

<SectorMain>
   <Object1 id="1" desc="Объект №1">
   <id>1</id>
   <sub_id>0</sub_id>
   <center_x>48</center_x>
   <center_y>48</center_y>
   <name>17</name>
   <img_path>graphic</img_path>
   <img_name>img1</img_name>
   <img_ext>png</img_ext>
   </Object1>
   <Object2 id="2" desc="Объект №2">
...

XML-файл загружается в сцену через URLLoader и парсится стандартным обходом всего дерева:

var Loader:URLLoader = new URLLoader();
var Request:URLRequest = new URLRequest();
Request.method = URLRequestMethod.POST;
Loader.dataFormat = URLLoaderDataFormat.TEXT;
Request.url = "файл XML";
Loader.addEventListener(Event.COMPLETE,OnComplete);
Loader.load(Request);

protected function OnComplete(e:Event):void {
   InfoLoader.removeEventListener(Event.COMPLETE,OnComplete);
   var SectorData:XML = new XML(e.target.data);
   CreateFromXML(SectorData);
}

protected function CreateFromXML(Data:XML):void {
   for each (var Node:XML in Data.*) {
      if(Node.nodeKind()=="element") {
         // Обработка каждого узла XML-дерева
      }
   }
}
Загрузив описание сцены и пропарсив XML-документ, встает вопрос: как при обработке узлов дерева по текстовому названию Object1 создать экземпляр класса Object1 и заполнить его нужными свойствами? На помощь приходит функция getDefinitionByName(ClassName:String) которая и решает эту задачу. Однако в ее работе присутствует следующая особенность: имя класса нужно указывать полностью, вместе с именем package которому данный класс принадлежит, даже если класс включен в package в котором вызывается getDefinitionByName.
Создание класса по имени будет выглядеть следующим образом:

var ClassReference:Class = getDefinitionByName("PackageName."+Node.name()) as Class;
var Instance:Object = new ClassReference();

В итоге Instance и будет экземпляром класса Object1
Tags: actionscript 3.0, progr, интерпланети
Subscribe

  • Аддон PartitionRender 0.0.2

    Обновление аддона PartitionRender до версии 0.0.2 Добавлена возможность задавать для рендера только ограниченный ряд партиций. Исправлена…

  • Аддон Blender: PartitionRender

    Аддон Blender, предназначенный для тех, кто не имеет возможности оставить компьютер включенным для рендера на продолжительное время. Версия:…

  • Аддон Blender: Accurate Render Border

    Аддон Blender, позволяющий устанавливать точные координаты для рамки рендера. После установки аддона, в Т-панель добавляется дополнительная…

Comments for this post were disabled by the author