динамически создавать несколько TextFields на основе array.length - PullRequest
0 голосов
/ 04 мая 2011

Я искал весь день, и мне не посчастливилось найти решение для этого.

Что я хотел сделать, так это динамически создавать TextFields на основе моего array.length.Поэтому, если у меня есть 3 строки в моем массиве, тогда нужно создать 3 TextFields с текстом массива.

Мне действительно удалось создать TextFields на основе array.length - однако впоследствии я не знаю, как ссылатьсяих по отдельности, скажем, изменить положение x, y для массива [1].Я пытался сохранить текстовые поля в другом массиве методом .push, но, похоже, не могу правильно ссылаться на них.

Есть предложения?

//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 ]

2 голосов
/ 04 мая 2011

Я не видел ничего странного с вашим кодом, все просто отлично работает. Если вы не видите результатов, возможно, ваш фон установлен на белый цвет, или у вас уже есть белый объект, добавленный на сцену. В этом случае вы ничего не увидите, так как цвет вашего текста установлен на белый (0xffffff). Например, если вы установите черный цвет (0x000000), вы увидите хороший результат.

Если это не так, правильно ли вы указали свой шрифт? При использовании Adobe IDE щелкните правой кнопкой мыши шрифт в библиотеке и выберите «Экспорт для ActionScript».

Массив, на который вы ссылаетесь, идеален. Поставьте этот код после вашего скрипта:

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

и вы увидите, что он отслеживает результат:

[object TextField] First TextField

Таким образом, вывод в порядке, ваш код может видеть экземпляр, поэтому он может прочитать его текстовое свойство и это правильно.

Если вы хотите установить координаты текстового поля динамически, просто поставьте

myTextField2.y = i * 50;

в цикле для . Это разместит каждый текст следующим образом: 0, 50, 100 и т. Д.

Вы также можете играть с координатой x.

0 голосов
/ 04 мая 2011

Можно попробовать массив, заполненный объектами, которые определяют свойства каждого текстового поля.

Ваши объекты могут определять любые свойства, которые вам нравятся - встроенные или пользовательские (если вы расширяете TextField своим собственным классом ивместо этого добавьте).

Пример: массив:

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