【问题标题】:Adding child element at Library Item在库项目中添加子元素
【发布时间】:2013-08-07 05:02:42
【问题描述】:

我在 as3 上遇到问题,我想在影片剪辑中添加文本字段,

您可以在第一张图片中看到,如您所见,它有一行。但我需要不止一排。我试图开发一个组件。这将从 xml 文件中获取日期并列出这些数据(xml 数据)。

当我添加一行时它可以,但是当我使用循环时(多行需要它)它不起作用,文本字段正在添加但背景影片剪辑(它位于我的库中的符号(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);

这是结果的截图,

但是当我使用循环时,我得到了这个结果

这是带有循环的代码

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

【问题讨论】:

  • 不清楚循环的用途或添加它的原因。
  • @Gus 我添加了屏幕截图,“项目”是第一行的背景,我想要做,我还想添加所有这些“项目”的文本字段,我用于循环,因为我将从 xml 文件中获取数据列表(会有不止一行)
  • 还有谁投了反对票,感谢他!我的问题还不错!
  • 你的问题是这样的:A 有效,但是当我做 B 时它不起作用,我该怎么办?... 想到的唯一答案是“不要做 B ”。我们无法读懂你的想法。编辑您的问题,以明确您要通过额外的 for 循环实现的目标,我将删除我的反对票。 成功会是什么样子? (画或描述)?如果我们知道您想要什么,我们或许可以帮助您实现它。
  • 不清楚吗?我将不得不“B”,因为我需要多行。好的,我扩展我的问题。

标签: actionscript-3 textfield addchild


【解决方案1】:

如果您使用循环来使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多