基于array.length动态创建多个TextField

时间:2011-05-04 07:57:37

标签: arrays actionscript-3 flash-cs5 textfield

我整天都在四处寻找,并没有找到解决方案。

我想要做的是根据我的array.length动态创建TextFields。因此,如果我的数组中有3个字符串,则需要创建带有数组文本的3个TextFields。

我已经设法实际创建了基于array.length的TextFields - 但是之后我不知道如何单独引用它们,让我们说为数组[1]重新定位x,y。 我试过通过.push方法将Textfields保存在另一个数组中,但似乎无法正确引用它们。

有什么建议吗?

//Create textfields based on data in Array - in this case 3 textfields
var textArray:Array = new Array('First TextField','TextField Two','Anything, really');

//Array to .push "save" created textfields
var referenceArray:Array = new Array();

// Creating font instance
var garageInstance:Font = new garage();

var myFormat:TextFormat = new TextFormat();

//Embedding font
myFormat.font = garageInstance.fontName;
myFormat.color = 0xFFFFFF;
myFormat.size = 46;
myFormat.align = TextFormatAlign.CENTER;

for (var i:int; i < textArray.length; i++)
{
//Creating the textfield object and naming it "myTextField2"
var myTextField2:TextField = new TextField();

myTextField2.defaultTextFormat = myFormat;
myTextField2.width = 930;
myTextField2.embedFonts = true;
myTextField2.multiline = true;
myTextField2.wordWrap = true;
myTextField2.selectable = false;
myTextField2.htmlText = textArray[i];

myTextField2.autoSize = TextFieldAutoSize.CENTER;

//Here we add the new textfield instance to the stage with addchild()
addChild(myTextField2);

//Saving textfield into array   
referenceArray.push(myTextField2);

}

2 个答案:

答案 0 :(得分:2)

我的代码没有看到任何奇怪的东西,一切都很完美。如果您没有看到任何结果,可能您的背景设置为白色,或者您已在舞台上添加了白色物体。在这种情况下,您将看不到任何内容,因为文本的颜色设置为白色(0xffffff)。例如,如果将其设置为黑色(0x000000),那么您将看到很好的结果。

如果不是这样,您是否正确引用了字体?如果使用Adobe IDE,请右键单击库中的字体,然后选择“为ActionScript导出”。

您正在使用的数组是完美的。将此代码放在脚本之后:

trace(referenceArray[0], referenceArray[0].text);

你会看到,它会追踪结果:

[object TextField] First TextField

因此输出正常,您的代码可以看到实例,因此它可以读取它的文本属性并且它是正确的。

如果要动态设置文本字段的坐标,只需输入

即可
myTextField2.y = i * 50;
for 循环中的

。这将按如下方式放置每个文本域:0,50,100等。

您也可以使用x坐标。

答案 1 :(得分:0)

可以尝试填充定义每个文本字段属性的对象的数组。

您的对象可以定义您喜欢的任何属性 - 内置或自定义(如果您使用自己的类扩展TextField并添加它)。

示例:array:

var ar:Array = [
{
    text: "text field 1",
    y: 100,
    x: 20
},
{
    text: "text field 2",
    y: 200,
    x: 10,
    alpha: 0.5 // demonstrating that you can define any properties in the object
}];

创建字段的for循环:

/**
 * Iterate through ar and create textfields with defined properties
 */
var i:Object;
for each(i in ar)
{
    var t:TextField = new TextField();

    /**
     * Text format things here
     */

    var j:String;
    for(j in i)
    {
        t[j] = i[j];
    }

    addChild(t);
}