Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3添加相同的DisplayObject不会第二次呈现TextField_Actionscript 3_Sprite_Textfield - Fatal编程技术网

Actionscript 3 AS3添加相同的DisplayObject不会第二次呈现TextField

Actionscript 3 AS3添加相同的DisplayObject不会第二次呈现TextField,actionscript-3,sprite,textfield,Actionscript 3,Sprite,Textfield,我遇到的问题是,我希望出现多个文本字段,而我只看到一个文本字段出现。我把范围缩小到这个代码。当我添加List元素时,我看到一个空矩形,下面有一个与我期望的大小完全相同的矩形。我看到的问题是TextField只出现在第二个矩形中。如果我添加三个元素,则只显示最后一个元素 下面的代码获取DisplayObjects的列表(当前有两个TextFields),遍历该列表,并为每个对象创建一个容器精灵。每个的容器精灵由每个DisplayObject高度的高度偏移,从而有效地创建了一个可视列表。如果同一文本

我遇到的问题是,我希望出现多个文本字段,而我只看到一个文本字段出现。我把范围缩小到这个代码。当我添加List元素时,我看到一个空矩形,下面有一个与我期望的大小完全相同的矩形。我看到的问题是TextField只出现在第二个矩形中。如果我添加三个元素,则只显示最后一个元素

下面的代码获取DisplayObjects的列表(当前有两个TextFields),遍历该列表,并为每个对象创建一个容器精灵。每个的容器精灵由每个DisplayObject高度的高度偏移,从而有效地创建了一个可视列表。如果同一文本字段在列表中使用了两次或两次以上,则该文本字段仅在最后一个元素中绘制。每个容器精灵都包含一个边界框,以指示其存在

package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.text.AntiAliasType;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

public class List extends Sprite
{
    private var data:Array=new Array;
    private var label:TextField= new TextField();

    public function List()
    {
        super();

        label.selectable=true;
        label.autoSize              = TextFieldAutoSize.LEFT;
        label.antiAliasType         = AntiAliasType.ADVANCED;
        label.text                  = "Testing";
        data.push(label);
        data.push(label);

    }


    public function renderList():void{
        var height:int=0;
        for (var i:int=0; i< data.length; i++){
            //get current sprite in list
            var current:DisplayObject=data[i];

            //create new sprite to contain element of array
            var listItem:Sprite=new Sprite;
            listItem.addChild(current);

            //draw bounding rectangle for reference
            var rect:Rectangle=current.getBounds(this);
            listItem.graphics.lineStyle(1, 0x000000);
            listItem.graphics.beginFill(0xFFFFFF);
            listItem.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
            listItem.graphics.endFill();

            //set height corresponding to bounds height
            listItem.y=height;

                            //calculate height for next item
            height=height + rect.height;

                            //add new list item 
            addChild(listItem);
        }
    }


}
}
包
{
导入flash.display.DisplayObject;
导入flash.display.Sprite;
导入flash.geom.Rectangle;
导入flash.text.AntiAliasType;
导入flash.text.TextField;
导入flash.text.textfield自动调整大小;
公共类列表扩展了Sprite
{
私有变量数据:数组=新数组;
私有变量标签:TextField=newtextfield();
公共职能清单()
{
超级();
label.selective=true;
label.autoSize=TextFieldAutoSize.LEFT;
label.antiAliasType=antiAliasType.ADVANCED;
label.text=“测试”;
数据推送(标签);
数据推送(标签);
}
公共函数renderList():void{
变量高度:int=0;
对于(变量i:int=0;i
不能将同一TextField对象添加为两个或多个容器的子对象。您需要在代码的某个地方再次添加
newtextfield()

比如,如果您按照下面的方式修改构造函数,您将能够看到两个文本字段

public function List()
    {
        super();

        label.selectable=true;
        label.autoSize              = TextFieldAutoSize.LEFT;
        label.antiAliasType         = AntiAliasType.ADVANCED;
        label.text                  = "Testing 1";
        data.push(label);
        label = new TextField();
        label.selectable=true;
        label.autoSize              = TextFieldAutoSize.LEFT;
        label.antiAliasType         = AntiAliasType.ADVANCED;
        label.text                  = "Testing 2";
        data.push(label);
    }

不能将同一TextField对象添加为两个或多个容器的子对象。您需要在代码的某个地方再次添加
newtextfield()

比如,如果您按照下面的方式修改构造函数,您将能够看到两个文本字段

public function List()
    {
        super();

        label.selectable=true;
        label.autoSize              = TextFieldAutoSize.LEFT;
        label.antiAliasType         = AntiAliasType.ADVANCED;
        label.text                  = "Testing 1";
        data.push(label);
        label = new TextField();
        label.selectable=true;
        label.autoSize              = TextFieldAutoSize.LEFT;
        label.antiAliasType         = AntiAliasType.ADVANCED;
        label.text                  = "Testing 2";
        data.push(label);
    }

问题不限于TextField,而是DisplayObject。一个DisplayObject有许多DisplayObject。一个DisplayObject不“拥有并属于多个”DisplayObject


由于DisplayObject只能引用一个父对象,因此当为同一个TextField分配新的父对象时,第一个精灵和TextField之间的原始关联将丢失。第二个精灵成为TextField的父对象。

问题不限于TextField,而是DisplayObject。一个DisplayObject有许多DisplayObject。一个DisplayObject不“拥有并属于多个”DisplayObject


由于DisplayObject只能引用一个父对象,因此当为同一个TextField分配新的父对象时,第一个精灵和TextField之间的原始关联将丢失。第二个精灵将成为TextField的父对象。

这是正确的,但值得注意的是,他将丢失对第一个TextField的主要引用,获得它的唯一方法是通过数据数组。我只是给出了他缺少的提示。对不起,我有点懒。Thanx纠正我@apocalyptic0n3这是正确的,但值得注意的是,他将丢失对第一个文本字段的主要引用,而获得它的唯一方法是通过数据数组。我只是给出了他缺少的提示。对不起,我有点懒。谢谢你在《启示录》中纠正了我