2011-05-06 9 views
0

私は、動的テキストフィールドを作成し、autoSizeをtrueに設定しました。そのため、必要に応じて大きくなる可能性があります。次に、_height値を使用してコンテナグラフィック(吹き出し)のサイズを設定します。Actionscript 2では、なぜこのTextField _heightが矛盾していますか?

ここでは(簡体字)のコードです:

var format:TextFormat = new TextFormat("Arial", 14); 
format.color = 0x000000; 
format.letterSpacing = -0.2; 

var txt:TextField = _root.createTextField("dialog_txt", 150, 10, 10, 150, 0); 
txt.multiline = true; 
txt.wordWrap = true; 
txt.autoSize = 'left'; 
txt.embedFonts = true; 
txt.selectable = false; 
txt.text = value; 
txt.setTextFormat(format); 

は、私はその後、テキストフィールド+ 5の高さに私のコンテナの高さを設定しようとするが、それはあまりにも短い出てきます。

container._height = txt._height + 5; 

は私が前に trace(txt._height)を追加することで、値がトレース値が小さすぎるにもかかわらず、右に出てくることがわかりました。一時変数( var junk=txt._height;)にtxt._heightを割り当てるだけでも問題は解決します。カップルのトレース機能であることを置き換える: 19.635.2直後

trace(txt._height); //Note: No code between these two calls 
trace(txt._height); 

返します。それはあたかもtxt._heightと読むことで再計算されるので、2回目は正しいです。

textHeightプロパティも試しましたが、_heightにアクセスした後も再計算されているようです。例えば、この配列は、これは、2 ASである

trace(txt.textHeight); // Returns 15 
trace(txt.textHeight); // Returns 15 
trace(txt._height); // Returns 19.6 
trace(txt.textHeight); // Returns 31 
trace(txt._height); // Returns 35.2 

MTASCによってコンパイルされます。

ここで何が起こっているかについてのアイデアはありますか?

答えて

0

まず、AS2を使用していることを明確にする必要があります。私はそれがあなたがそれらの行に沿ってFlash 8または何かを実行していることを意味します(AS3は.heightを使用し、AS2は._heightを使用します)。

何が起こっているかは、新しいフレームでのみ計算が行われることです。あなたはあなたのサイズ変更コードを後で呼び出すためにsetTimeout()やdispatchEventのようなものを使ってみましたか?

私の経験から、オートサイズはうまく動かなかった。 Textfieldを拡張し、superを呼び出す独自のテキスト関数を作成し、テキストフィールドの高さを_textHeightに拡張するクラスを作成するほうがはるかに優れています。この値は、自動サイズ調整をオフにして最初に正しくなければなりません。

+0

洞察力をお寄せいただきありがとうございます。アクションスクリプト2です。 – mrdrbob

0

プロパティの代わりにheightプロパティを使用してみてください。

+0

'txt.height'は' undefined'を返します。 – mrdrbob

+0

あなたはActionScript 1または2を使用していると思いますか?確認できますか? – elekwent

+0

正解、私はActionScript 2を使用しています。 – mrdrbob

関連する問題