【问题标题】:AS3 addChild with TextFields only showing the last one added带有 TextFields 的 AS3 addChild 仅显示添加的最后一个
【发布时间】:2011-11-03 22:05:28
【问题描述】:

我正在使用 actionscript 构建 Facebook 客户端,但遇到了问题。我有这段代码:

        var loader:URLLoader = URLLoader(event.target);

        var feedResponse:String = (event.target.data);
        var object:Object = JSON.decode(feedResponse); //getting the data

        var friendsStatus:Array = new Array(); //array for status'
        var friendsName:Array = new Array(); //array for names

        var startX:int = 120;
        var startY:int = 100;

        var myFormat:TextFormat = new TextFormat();
        myFormat.size = 16;

        var statusMessage:TextField = new TextField();
        statusMessage.defaultTextFormat = myFormat;
        statusMessage.wordWrap = true;
        statusMessage.width = 600;

        var faceFriend:TextField = new TextField();
        faceFriend.defaultTextFormat = myFormat;
        faceFriend.wordWrap = true;
        faceFriend.width = 300;

        for(var i:int = 0; i < 10; i++)
        {
            if(object.data[i].message == undefined){
                var userStory:String = object.data[i].story; // mowing through the facebook JSON response
                friendsStatus[i] = userStory;
            } else {
                var userStatus:String = object.data[i].message;
                friendsStatus[i] = userStatus;
            }

            var fName:String = object.data[i].from.name;
            friendsName[i] = fName;
        } 

        for(var j:int; j < 10; j++) // The headache loop
        {
            faceFriend.x = startX;
            faceFriend.y = startY;

            faceFriend.text = friendsName[j]; //assign the current name to the TextField text property
            addChild(faceFriend); //add it to the stage
            startY += 30; //increase the y value so they dont overlap
            trace(startY);
            trace(faceFriend.text);
            trace("");

            statusMessage.x = startX;
            statusMessage.y = startY;

            statusMessage.text = friendsStatus[j]; //same here for the status'
            addChild(statusMessage);
            startY += 20;
            trace(startY);
            trace(statusMessage.text);
            trace("");
        }

它应该遍历一组状态',将它们分配给变量并将它们添加到阶段。但是,我所获得的只是添加到舞台的最后一个状态。 正如您从所有跟踪中看到的那样,我发现所有数组都具有正确的信息,并且 y 值(因此它并非全部相互重叠)正在正确进行。它只是拒绝让除了最终的 TextField 之外的任何东西都可见:(

有什么想法吗?

附:我意识到这不是非常出色的代码 - 提前为头痛感到抱歉:P

【问题讨论】:

    标签: flash actionscript addchild


    【解决方案1】:

    你需要创建

    var faceFriend:textField inside the loop.
    

    您目前正在做的是创建一个文本字段并一遍又一遍地操作它。这导致了一个问题。此代码将生成 10 个字段并将它们水平对齐。

    var faceFriend:TextField;
    
    for(var i:uint;i<10;i++)
    {
        faceFriend = new TextField();
        faceFriend.x = i*20;
        addChild(faceFriend);
    }
    

    而此代码将生成一个字段,对其进行 10 次操作并显示一个字段,这实际上就是您正在做的事情。

    var facefriend:TextField = new TextField();
    
     for(var i:uint;i<10;i++)
     {
        faceFriend.x = i*20;
        addChild(faceFriend);
     }
    

    这个

    【讨论】:

    • 哇,非常感谢你们,这解决了我的问题 :) 不敢相信我没想到!
    【解决方案2】:

    您现在所做的只是创建 1 个实例。然后您在循环中设置位置,因此您最初创建的位置正在移动。

    要创建 10 个文本字段,您需要在循环内创建一个实例。

    所以你需要这样做

    for(var i:int=0; i<10; i++) {
    var faceFriend:TextField = new TextField();
    faceFriend.defaultTextFormat = myFormat;
    faceFriend.wordWrap = true;
    faceFriend.width = 300;
    //Everything else
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-15
      相关资源
      最近更新 更多