2013-06-30 4 views
0

У меня есть массив текстового поля, поскольку элементы массива имеют разные размеры ширины. Я хочу добавить его на сцену как одну строку без пробелов. Итак .. как установить ось x ?Элементы массива x axis actionscript 3

вот код:

var _objects:Array = new Array(); 
var rowCount:uint = 114; 
for (var o:uint = 0; o<114; o++) 
{ 
    var label_txt:TextField = drawTxt(); 
    _objects.push(label_txt); 
    label_txt.y = 10 
    label_txt.x = (o % rowCount) * (_objects[o].width);// this code gives me 100 px on x for each element. 

    addChild(label_txt); 
} 

ПОДРОБНЕЕ

текстовое поле:

function drawTxt():TextField 
{ 
    var label_txt:TextField = new TextField(); 
    label_txt.border = true; 
    label_txt.antiAliasType = AntiAliasType.ADVANCED; 
    label_txt.selectable = false; 
    label_txt.multiline = false; 
    label_txt.defaultTextFormat = myFormatBold; 
    return label_txt; 
} 

текстовые данные (XML):

function arrayzeLabelsXML():void 
{ 
    for (var i:int = 0; i < xmlLabelsData.item.length(); i++) 
    { 
     attributeLabelsContent.push(xmlLabelsData.item[i][email protected]); 
     translateContent.push(xmlLabelsData.item[i][email protected]); 

     nodeLabelsContent.push(xmlLabelsData.item[i]); 
     nodeContent.push(xmlLabelsData.translate[i]); 

     _objects[i].text = nodeLabelsContent[i]; 
     _objects[i].width = _objects[i].textWidth + 20; 
     _objects[i].addEventListener(MouseEvent.CLICK,clickHandler); 

    } 
} 

Спасибо

ответ

0

1.Add TextFields, только установить у значение

var _objects:Array = []; 
var rowCount:uint = 114; 
var currentX:Number = 0; 
for (var o:uint = 0; o<rowCount; o++) 
{ 
    var label_txt:TextField = drawTxt(); 
    _objects.push(label_txt); 
    label_txt.y = 10 
    addChild(label_txt); 
} 

2.set text to textField, причина, по которой вы получили textWidth, равную 0, вы не задали для них текст.

arrayzeLabelsXML(); 

3.to множества х значений

var currentX:Number = 0; 

    var gap:Number = 0; 

    for (var o:uint = 0; o<rowCount; o++) 
    { 
     var label_txt:TextField = _objects[i] as TextField; 
     if (label_txt) { 
      label_txt.x = currentX + gap;//if you find the textField overlap,try to set a bigger gap. 
      currentX += label_txt.textWidth; 
     } 

    } 
+1

Спасибо, что решили. Спасибо всем, Пан, Сунил и Гастон. – Nezarov

+0

Я запускаю внутри функции arrayzeLabelsXML код ниже: – Nezarov

+0

var label_txt: TextField = _objects [i] как TextField; \t \t, если (label_txt) \t \t { \t \t \t label_txt.x = CurrentX; \t \t \t currentX + = label_txt.textWidth + 20; \t \t} – Nezarov

0

Обратите внимание, что класс TextField имеет textWidth и textHeight. Это фактическая ширина/высота текста в отличие от ширины/высоты DisplayObject, которая содержит текст.

ПРИМЕЧАНИЕ: documentation says Размер по умолчанию из TextField является 100x100, поэтому width не всегда может равняться textWidth (который я предполагаю, что это в данном случае).

Так как вы говорите, что вы хотите, чтобы расположить их в линии ж/нет места, я бы также использовать алгоритм, как это:

var _objects:Array = []; 
var rowCount:uint = 114; 
var currentX:Number = 0; 
for (var o:uint = 0; o<114; o++) 
{ 
    var label_txt:TextField = drawTxt(); 
    _objects.push(label_txt); 
    label_txt.y = 10 
    label_txt.x = currentX; 
    currentX = currentX + label_txt.textWidth; 
    addChild(label_txt); 
} 
+0

Спасибо за ваш ответ, на самом деле это не работает! возвращаемое значение равно 0 – Nezarov

+0

Возможно, вам стоит показать больше кода. Если я просто делаю 'var tf: TextField = new TextField(); tf.text = "Woot"; trace (tf.textWidth); 'output is" 24.1 ". Возможно, вы должны отредактировать свой вопрос, чтобы показать, что происходит в 'drawTxt()'. –

+0

ширина поля текста правильная моя проблема только с осью x – Nezarov