Flash AS2 - создание динамических текстовых полей в цикле - PullRequest
0 голосов
/ 12 августа 2010

Я хочу заполнить сцену списком динамических текстовых полей с отдельными именами, например, pg4_txt1, pg4_txt2, pg4_txt3.Я новичок во флэш-памяти, я пытался создать переменные с циклом while, но я просто не понял этого.

Вот какой-то странный псевдокод, объясняющий, что я хочу сделать:

var leading:Number = 15;
var i:Number = 0;
while (i<14) {
leading+leading; //using this to set the y position
createTextField("dynamic_txt+[i]", 1, 10, 10+leading, 150, 30); //Create 15 text fields vertically spaced
}

Обновление - Попытка этого кода (из PatrickS) просто создает переменную -dynamic_txt14

var leading:Number = 0;
for( var i:Number = 0; i < 15 ; ++i )
{

  var tfName:String = "dynamic_txt" + i.toString();

  //Create 15 text fields vertically spaced
  createTextField(tfName , 1, 10, 10, leading, 50, 30);
  trace(tfName);
  // a slight improvement to the leading incrementation :)
  leading += 10; //using this to set the y position
}


dynamic_txt14.text = "hello!";

РЕДАКТИРОВАТЬ - Решение

var leading:Number = 11;
var myTxtField:TextField;
for (i=0; i<15; i++) {
    textBoxes = "dynamic_txt"+i;
    this.createTextField(textBoxes, this.getNextHighestDepth(), 250, leading, 100, 300, 100);
    myTxtField = this[textBoxes]
    myTxtField.text = "hello";
    trace(myTxtField.text);
    leading += 20;
}

1 Ответ

1 голос
/ 13 августа 2010

EDIT

Извините, вам придется адаптироваться к AS2.Этот код отображает 14 текстовых полей с именами от dynamic_text0 до dynamic_text14.Если это не сработает, я действительно не уверен, что вы делаете неправильно ...

    private function init():void
    {
        var numOfItems:int = 15;
        var tfName:String; 
        var leading:Number = 15;

        for( var i:int = 0 ; i < numOfItems ; ++i )
        {
            tfName = "dynamic_text" + i.toString();

            createTextField( tfName , leading );
            leading += 10;
        }

    }

    private function createTextField(tfName:String , leading:Number):void
    {
        var tf:TextField = new TextField();
        tf.name = tfName;
        tf.autoSize = TextFieldAutoSize.LEFT;
        tf.y = leading;

        tf.text = tfName;

        addChild( tf );
    }

END OF EDIT

Вам нужно увеличить значение i!

var leading:Number = 15;
var i:Number = 0;

while (i < 15) {

  var tfName:String = "dynamic_txt" + i.toString();

  //Create 15 text fields vertically spaced
  createTextField( tfName , 1, 10, 10+leading, 150, 30);

  ++leading; //using this to set the y position
  ++i; // increment the i value at each iteration
}

или вы можете использовать цикл for

for( var i:int = 0; i < 15 ; ++i )
{
  var tfName:String = "dynamic_txt" + i.toString();

  //Create 15 text fields vertically spaced
  createTextField( tfName , 1, 10, 10+leading, 150, 30);

  ++leading; //using this to set the y position
}

Я не знаком с AS2, поэтому я не знаю, доступен ли метод toString (), если нет, найдите эквивалент AS2, остальные должны работать как есть.

EDIT

Если есть проблема, то это с методом createTextField (), тогда ... Я дважды проверил с помощью trace ()оператор и оба цикла работают нормально, значение tfName & lead увеличивается, как и ожидалось.

попробуйте это и посмотрите результат:

for( var i:int = 0; i < 15 ; ++i )
{
  var tfName:String = "dynamic_txt" + i.toString();

  //Create 15 text fields vertically spaced
  //createTextField( tfName , 1, 10, leading, 150, 30);
  trace( "tfName:" , tfName , "leading: " , leading );

  // a slight improvement to the leading incrementation :)
  leading += 10; //using this to set the y position
}

Я предполагаю, что вы не создаете новый экземплярПеременная TextField в вашем методе createTextField, поэтому вы видите только последний.

...