Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с циклом for (http://www.flasher.ru/forum/showthread.php?t=160618)

DarkKnight2009 15.07.2011 01:17

Работа с циклом for
 
Вложений: 1
Здравствуйте.
Подскажите пожалуйста.
Хочу, чтоб координаты для текста по оси Y брались соответственно из массива, то есть: есть 4 строки текста и для первой координата по Y = 100, для второй строки Y = 150 и т.д
Написал цикл, который должен проходить по массиву и подставлять координаты для каждой строки, но у меня получилась, какая-то фигня, - текст накладывается друг на друга, да и еще выводится каждая строчка 4 раза.
Вот картинка:
Вложение 26826
а вот код:
Код AS3:

import flash.text.TextField;
 
var coordsArray:Array = [100, 150, 200, 250];
 
var txt1:TextField;
var txt2:TextField;
var txt3:TextField;
var txt4:TextField;
 
for(var i:int = 0; i < coordsArray.length; i++)
{
        txt1 = new TextField();
        txt1.text = "One";
        txt1.x = 100;
        txt1.y = coordsArray[i];
        addChild(txt1);
 
        txt2 = new TextField();
        txt2.text = "Two";
        txt2.x = 100;
        txt2.y = coordsArray[i];
        addChild(txt2);
 
        txt3 = new TextField();
        txt3.text = "Three";
        txt3.x = 100;
        txt3.y = coordsArray[i];
        addChild(txt3);
 
        txt4 = new TextField();
        txt4.text = "Four";
        txt4.x = 100;
        txt4.y = coordsArray[i];
        addChild(txt4);       
}


lolsuicide 15.07.2011 01:24

ну все правильно он делает, если надо на "новой строке" свой текст, тут цикл вообще не нужен, просто:
Код AS3:

txt1.y = coordsArray[0];
txt2.y = coordsArray[1];
txt3.y = coordsArray[2];
txt4.y = coordsArray[3];


Nooob 15.07.2011 01:26

Код AS3:

var coordsArray:Array = [100, 150, 200, 250];
var textArray:Array = ["One", "Two", "Three", "Four"];
var textFieldArray:Array = [];
for(var i:int = 0; i < coordsArray.length; i++)
{
        textFieldArray[i] = new TextField();
        textFieldArray[i].text = textArray[i];
        textFieldArray[i].x = 100;
        textFieldArray[i].y = coordsArray[i];
        addChild(textFieldArray[i]);
}

например

lolsuicide 15.07.2011 01:31

можно и coordsArray убрать :)
Код AS3:

textFieldArray[i].y = 100 + i*50


goodguy 15.07.2011 09:26

Если по-конкретнее, то можно, например, так:
Код AS3:

var texts:Array = ["one", "two", "three", "four"];
var i:int;
for (i = 0; i < texts.length; i++) {
      var txt:TextField = new TextField();
      txt.text = texts[i];
      txt.x = 100;
      txt.y = 100 + i * 50;
      addChild(txt);
}


arkadattx 15.07.2011 11:35

goodguy, а зачем выносить из цикла переменную i и при этом не создавать переменную, указывающую на длину массива?

gloomyBrain 15.07.2011 11:44

это по конвенции =)

goodguy 15.07.2011 12:06

Цитата:

и при этом не создавать переменную, указывающую на длину массива?
Можно и указать. А можно и i не выносить. Для такого маленького массива все это не принципиально
хотя я обычно выношу и то и другое

Wolsh 15.07.2011 12:53

Цитата:

можно и coordsArray убрать
В 90% случаев да. В 10% верстальщик, знакомый с законами типографики, предпочтет ручное управление расстоянием между строками.


Часовой пояс GMT +4, время: 21:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.