2013-08-06 2 views
0

У меня есть проблема на as3, я хочу добавить текстовое поле в мувиклип,Добавление дочернего элемента в библиотеке Пункт

вы можете увидеть на первом изображении, он имеет одну строку, как вы видите. Но мне нужно больше, чем одна строка. Я пытаюсь разработать компонент. Это будет получение даты из файла xml и перечисление этих данных (данные xml).

Когда я добавляю одну строку, это нормально, но когда я использую цикл (это необходимо для нескольких строк), это не работает, текстовое поле добавляется, но фоном movieclip (он расположен как символ в моей библиотеке (WhiteLine)). не является!.

этот код работает успешно,

  var myTextField:TextField = new TextField();  
      myTextField.text = "some text here!"; 
      myTextField.width = 250; 
      myTextField.x = 0; 
      myTextField.y = 0; 
      myTextField.selectable = true; 
      myTextField.autoSize = TextFieldAutoSize.LEFT; 
      var myFormat:TextFormat = new TextFormat(); 
      myFormat.color = 0xAA0000; 
      myFormat.size = 12; 
      myFormat.italic = true; 
      myTextField.setTextFormat(myFormat); 
      item = new WhiteLine; 
      item.x = 1; 
      item.y = (i*30)+1+3*i; 
      item.addChild(myTextField); 
      avatar.addChild(item);    
      item.addEventListener(MouseEvent.MOUSE_OVER, listItemOver); 

вот скриншот результата, //resim

но когда я использую цикл, я получаю этот результат resim2

и вот код с петлей

 for(var i:int=0;i<25;i++) 
     {    
      var myTextField:TextField = new TextField();  
      myTextField.text = "some text here!"; 
      myTextField.width = 250; 
      myTextField.x = 0; 
      myTextField.y = 0; 
      myTextField.selectable = true; 
      myTextField.autoSize = TextFieldAutoSize.LEFT; 
      var myFormat:TextFormat = new TextFormat(); 
      myFormat.color = 0xAA0000; 
      myFormat.size = 12; 
      myFormat.italic = true; 
      myTextField.setTextFormat(myFormat); 
      item = new WhiteLine; 
      item.x = 1; 
      item.y = (i*30)+1+3*i; 
      item.addChild(myTextField); 
      avatar.addChild(item);    
      item.addEventListener(MouseEvent.MOUSE_OVER, listItemOver);    
     } 
+0

Непонятно, для чего нужен цикл или почему вы его добавляете. – Gus

+0

@Gus я добавил скриншот, «элемент» - это фон первой строки, и я хочу вообще сделать, также хочу добавить текстовое поле для всех этих «элементов», я использовал для цикла, потому что получаю данные список из файла xml (там будет более одной строки) –

+0

также кто сделал downvote благодаря ему! мой вопрос не плохо для downvote! –

ответ

0

Если вы используете свой цикл для использования данных из XML-файла, вам необходимо загрузить данные XML из внешнего XML-файла (я очень быстро издевался над этим вопросом - я создал пример, используя класс документа - если вы пишете свой ActionScript на временной шкале Flash, тогда вам нужно будет изменить этот код)

package { 
import flash.events.Event; 
import flash.net.URLRequest; 
import flash.net.URLLoader; 
import flash.text.TextFormat; 
import flash.text.TextField; 
import flash.text.TextFieldAutoSize; 
import flash.text.Font; 

public var loader:URLLoader; 
public var data:XML; 
public var items:XMLList; 

public class DocumentClass extends MovieClip { 
public function DocumentClass() { 
      dataLoad();  
} 
private function dataLoad():void { 
    loader = new URLLoader(); 
    loader.addEventListener(Event.COMPLETE, dataLoaded); 
    loader.load(new URLRequest("data.xml")); // change data.xml to your xml file's path 
} // end of dataLoad() 

private function dataLoaded(event:Event):void { 
// this property holds the loaded xml data 
    data = new XML(event.target.data); // event.target.data relates to the dataLoad() function that results in dataLoaded() being called 

    // the items property holds all the repeating item elements 
    items = data.item; 

    // beginning of loop - items.length is the number of items in the xml file 
    for (var i = 0; i < items.length(); i++) { 
    var myTextField:TextField = new TextField();  
    addChild(myTextField); 
    myTextField.text = items[i].toString(); 
    myTextField.width = 250; 
    myTextField.x = 0; 
    myTextField.y = 0; 
    myTextField.selectable = true; 
    myTextField.autoSize = TextFieldAutoSize.LEFT; 
    var myFormat:TextFormat = new TextFormat(); 
    myFormat.color = 0xAA0000; 
    myFormat.size = 12; 
    myFormat.italic = true; 
    myTextField.setTextFormat(myFormat); 
    item = new WhiteLine; 
    item.x = 1; 
    item.y = (i*30)+1+3*i; 
    item.addChild(myTextField); 
    avatar.addChild(item); 
    } // end of loop 
    } // end of dataLoaded() 
    } // end of class 
} // end of package 
Смежные вопросы