テキストフィールドを作成して構成したときに、表示リストに追加することなくテキスト測定が正常に機能するため、次の情報が欠落しています。
このテクニックは、TextFieldを完全に構成した後に、「text」プロパティLASTを設定することを確認することです。 "text"プロパティを設定すると、以前に設定したすべての設定を考慮して、レイアウトを完成させるように見えます。
「text」プロパティを設定してから、multilineやembedFontsなどの他の設定を変更している可能性があります。これを行うと、getLineMetricsは正しい値を返しません。その後、 "text"プロパティを設定してgetLineMetricsを再度チェックすると、値は正しいでしょう。この例とトレース文の後のコメントを参照してください。
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("Arial Black", 16, 0, false);
tf.embedFonts = true;
tf.text = "Hello"; //set text last
trace(tf.getLineMetrics(0).height); //Traces 22.55 (correct)
var tf2:TextField = new TextField();
tf2.defaultTextFormat = new TextFormat("Arial Black", 16, 0, false);
tf2.text = "Hello"; //set text first
tf2.embedFonts = true; //modify a property after setting text seems to make the TextField "dirty"
trace(tf2.getLineMetrics(0).height); //Traces 1.15 (incorrect)
var tf3:TextField = new TextField();
tf3.defaultTextFormat = new TextFormat("Arial Black", 16, 0, false);
tf3.text = "Hello";
tf3.embedFonts = true; //modifying a property after setting the text seems to make the TextField "dirty"
tf3.text = "Hello"; //setting the text again seems to fix the problem
trace(tf3.getLineMetrics(0).height); //Traces 22.15 (correct)
ここでの教訓は、TextFieldの問題を構成する順序です。たとえば、defaultTextFormatプロパティを使用してテキストを設定する必要があります。設定しないと、設定した新しいテキストがdefaultTextFormatを取得しません。その場合、フォントがオンになっていて、埋め込まれていない他のデフォルトのフォントが使用されていると、テキストがまったく表示されないことがあります。したがって、まずdefaultTextFormatを設定し、他のプロパティを設定し、getLineMetricsを呼び出す直前に "text"を最後に設定してください。
ここでは、作成したこの関数を使用します。 TextFieldの重要なプロパティ(text、type、multiline、selectable、embedFonts)を最初に設定し、その後のパラメータはTextFormatコンストラクタのものと同じ順序で設定する必要があります。プロパティが正しい順序で設定され、テキストが最後に割り当てられ、TextFieldの作成が1つのステートメントに減らされます。
public static function CreateTextField(text:String = "", type:String = null, multiline:Boolean = false, selectable:Boolean = true, embedFonts:Boolean = false, font:String=null, size:Object=null, color:Object=null, bold:Object=null, italic:Object=null, underline:Object=null, url:String=null, target:String=null, align:String=null, leftMargin:Object=null, rightMargin:Object=null, indent:Object=null, leading:Object=null):TextField
{
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat(font, size, color, bold, italic, underline, url, target, align, leftMargin, rightMargin, indent, leading);
tf.embedFonts = embedFonts;
tf.multiline = multiline;
tf.selectable = selectable;
tf.type = type;
tf.text = text; //setting text last ensures the text line metrics returns correct values
return tf;
}
コードをコピーしてメインタイムラインのFlash CS4に貼り付けると、同じ番号が表示されません。私は0,1.15,0を得ています。 – MrB
あなたのフォントは埋め込まれていません。ライブラリにArial Blackを埋め込む必要があります。使用カウントがゼロの場合、実際にフォントが埋め込まれていることを確認するには、 "export for actionscript"をチェックする必要があります。フォントを埋め込まなければ、22.55ではなく0が表示されます。 – Triynko