动作脚本中的单词对齐

word alignment in actionscript

我有一个句子作为字符串。

internal var sentence:string = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";

然后我将每个单词分开并存储在一个名为 wordArray 的数组中并应用于文本字段并使用 addChild 添加到舞台。

for(var i:uint =0;x i< sentence.split(" ").length; i++){
     wordArray.push(sentence.split(" ")[i]);
     txt = new TextField();
     addChild(txt);
     txt.text = wordArray[i];
}

对齐

if(i==0) { txt.x = wordArray[i].x;}
else{ txt.x = wordArray[i -1].width + wordArray[i-1].x+2};

这将完美对齐第一行。我想处理具有特定宽度的多行,如 TextField。(如果单词超出边界限制,它必须像 textField 一样进入下一行)

?

首先,我会纠正你的错误。

internal var sentence:string

var sentence:String

默认访问修饰符是内部的。你不需要在这里写内部。 AS3中没有stringclass/object。对于字符串使用 String.


for (var i:uint = 0;x i< sentence.split(" ").length; i++){

i <之前的x是什么?删除它。


在您的代码中,句子拆分了多次。为避免这种情况,请将您的句子拆分一次。

var splittedSentence:Array = sentence.split(" ");

for (var i: uint = 0; i < splittedSentence.length; i++)

下一个。

wordArray.push(sentence.split(" ")[i]);
txt = new TextField();
addChild(txt);
txt.text = wordArray[i];

您不需要在 wordArray 中存储子字符串。但是您应该存储所有 TextFields。

txt = new TextField();
addChild(txt);
txt.text = sentence.split(" ")[i];
wordArray.push(txt);

定义变量 line 存储文本的当前行(从 0 开始)。

var line:int = 0;

autoSize 属性 设置为文本字段:

txt.autoSize = TextFieldAutoSize.LEFT;

因此在将文本添加到 TextField 后,TextField 的宽度和高度将调整大小。


if (txt.x + txt.width > stage.stageWidth)
{
    txt.x = 0;
    line++;
}

如果当前 TextField 越界,它将被移动到下一行。

最后,设置TextField的y属性:

txt.y = txt.height * line;

完整代码:

import flash.text.TextField;
import flash.text.TextFieldAutoSize;

var sentence: String = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
var wordArray: Array = [];
var txt: TextField;

var line:int = 0;

var splittedSentence:Array = sentence.split(" ");

for (var i: uint = 0; i < splittedSentence.length; i++)
{
    txt = new TextField();
    txt.autoSize = TextFieldAutoSize.LEFT;
    addChild(txt);
    txt.text = splittedSentence[i];

    wordArray.push(txt);

    if (i == 0)
        txt.x = wordArray[i].x;
    else
        txt.x = wordArray[i - 1].width + wordArray[i - 1].x + 2;

    if (txt.x + txt.width > stage.stageWidth)
    {
        txt.x = 0;
        line++;
    }

    txt.y = txt.height * line;
}

结果:

我会说使用居中对齐格式的多行 TextField

var sentence:String="Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
var altered:String=sentence.split(" ").join("\n");
var ta:TextField=new TextField();
ta.multiline=true; // makes a text area out of a text field, necessary
var tf:TextFormat=new TextFormat("Arial",12); // whatever
tf.align=TextFormatAlign.CENTER; // necessary
ta.defaultTextFormat=tf;
ta.text=altered;
addChild(ta);
// now we can get proper text height and actually do whatever we wish.

如果您缺少自动换行功能,则不应使用 altered,而应使用原始 sentence,并设置 ta.wordWrap=true;.