0

as3に問題があり、ムービークリップにテキストフィールドを追加したいのですが、

最初の画像でわかるように、ご覧のように 1 行あります。しかし、私は複数の行が必要です。コンポーネントを開発しようとしています。これは、xml ファイルから日付を取得し、これらのデータ (xml データ) を一覧表示します。

1行を追加すると問題ありませんが、ループを使用すると(複数の行に必要です)機能しません。

このコードは正常に動作し、

            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);

これが結果のスクリーンショットです。 //レシム

しかし、ループを使用すると、この結果が得られます 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);             
        }
4

1 に答える 1

0

ループを使用して XML ファイルからデータを使用している場合は、外部 XML ファイルから xml データをロードする必要があります (これを非常に簡単にモックアップしました。ドキュメント クラスを使用して例を作成しました。アクション スクリプトを 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
于 2013-08-06T21:02:42.693 に答える