2011-05-06 50 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),價值觀出來的權利,即使跟蹤值太小。即使只是將txt._height分配給一個臨時變量(var junk=txt._height;)也可以解決該問題。更換與一對夫婦的跟蹤功能:

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

返回19.6通過35.2緊隨其後。就像讀取txt._height導致它重新計算一樣,所以第二次是正確的。

我也試過了textHeight屬性,這個屬性在訪問_height後似乎也會重新計算。例如:這個序列:

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 

這是在AS 2編寫的MTASC

關於這裏發生了什麼的任何想法?

回答

0

首先,您需要說明您使用的是AS2。我認爲這意味着您正在運行Flash 8或其他版本(AS3使用.height,AS2使用._height)?

可能發生的情況是計算僅發生在新幀上。你有沒有嘗試使用像setTimeout()稍後調用您的調整大小代碼或dispatchEvent做大小調整?

從我的經驗來看,autosize從來沒有運行良好。創建一個擴展Textfield的類並編寫自己的文本函數調用super,然後將文本字段的高度擴展爲_textHeight,會更好。自動關閉時,此值應該是第一次。

+0

感謝您的洞察力。它是Actionsript 2。 – mrdrbob 2011-05-09 15:06:08

0

嘗試使用height屬性而不是_height屬性。

+0

'txt.height'只返回'undefined'。 – mrdrbob 2011-05-06 21:47:38

+0

我認爲這意味着您使用的是ActionScript 1或2.您能否確認? – elekwent 2011-05-06 22:01:25

+0

正確,我正在使用ActionScript 2. – mrdrbob 2011-05-09 15:06:27

相關問題