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

  • Маршрутковое :)

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

  • Размышлятельное :)

    - Что страшнее, беспощадно-бессмысленная бойня или бессмысленно-беспощадная? - буркнул Арджан, осуждающе поглядев на Шумани.

  • Целеустремленное :)

    - Масло?! - Расхохоталась лягушка. - Я шла по головам! - Как это? - удивился Андо. - В "Царя горы" в детстве играл?

Comments for this post were disabled by the author