动作脚本中的单词对齐
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中没有string
class/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;
.
我有一个句子作为字符串。
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中没有string
class/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;
.