2013-07-25 39 views
0

我需要獲取放置在舞臺中的textField中使用的樣式,並通過代碼執行此操作。如何從代碼加載的經典文本字段中獲取「樣式」?

對我來說,大膽和斜體是不夠的,因爲我的風格是半大膽的。

而當我分析我的代碼中的textField時,我無法找到獲取該樣式的方法。

你知道有什麼辦法嗎?

換句話說,當我得到textFormat時,我需要知道Flash中使用的字體風格是什麼。

例如,如果我有一個字體是「Signika」,我需要知道風格是Semibold。現在,我只得到「Signika」。如果我檢查大膽的風格,它會起作用,因爲大膽是真的。但那是我可以從中得到的所有信息。

謝謝。

回答

1

請看TextField API ReferencegetTextFormat()方法。 (耶!)

它返回一個TextFormat對象,該對象包含的TextField,然後可以經由setTextFormat()施加到另一個文本字段的完整定義。也就是說,字體系列在AS3中的工作方式稍有不同(可悲的是,不是Adobe的錯,而是操作系統)。例如,Myriad Pro有Regular,Light,Semibold和Bold。但是,一旦嵌入,只顯示兩個實際的字體名稱,並且區分它們的唯一方法是設置TextFormat.bold = true

The problem with getting font families in flash.

有趣的是,省略這些同伴字體之一的嵌入不會拋出一個錯誤,而是在你僅嵌入無數Pro的定期,而不是無數臨大膽的情況下,設置TextFormat.bold = true將在常規模式下執行模仿粗體(這實際上會比實際粗體字質量低得多,但是它可以工作)。

希望能夠解決問題。


更新

我看着Signika,它顯然是從急性身份危機受到影響。爲了舉例說明,嵌入整個字體系列並運行以下命令:

var fontList:Array = Font.enumerateFonts(); 
for(var i:int = 0; i < fontList.length; i++) { 
    trace("Font Name: " + fontList[i].fontName + ", " + fontList[i].fontStyle) 
} 

這將跟蹤環境中存在的每種字體的列表。可悲的是,無論您如何嵌入字體(以編程方式或通過導入庫),字體都會覆蓋其他系列條目(假設是因爲它們報告的方式與環境無差別)。

// Myriad Pro Results: 
Font Name: Myriad Pro, regular 
Font Name: Myriad Pro, bold 
Font Name: Myriad Pro Light, regular 
Font Name: Myriad Pro Light, bold 

運行鍼對無數的Pro系列相同的查詢實際上報告四個條目,沒有重疊,而Signika將只報告的4 2。

// Signika Results: 
Font Name: Signika, regular 
Font Name: Signika, bold 

我前面提到依然存在:使用上述API方法將導致TextFormat對象,充分說明所使用的字體。這些區別在於對象上的name:Stringbold:Boolean屬性。但是,由於Flash會覆蓋具有相同報告屬性的嵌入對象(或者根本不覆蓋),因此您隨時可以使用4種家族樣式中的2種:常規版本和粗體版本。

希望澄清事情。

+0

我正在使用getTextFormat方法。但它不告訴我什麼風格。其實,沒有風格的財產,或類似的東西。順便說一句,我總是嵌入字體,否則我會在清晰度方面得到糟糕的結果。我錯過了什麼嗎? – Artemix

+0

這取決於你的意思是「風格」。 'getTextFormat'返回一個具有以下屬性的對象:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextFormat.html。您可以使用同一個對象並將其應用於新的TextField並複製外觀。正如你從上面給出的例子中看到的那樣,在特定字體的屬性中沒有引用「Semibold」,並且實際上顯示爲「TextFormat.bold = true」的「Myriad Pro Light」,但它是Myriad Pro Semibold ,這就是你如何通過編程來定義它。 – Atriace

+0

對於「清晰度方面的糟糕結果」,您可以打開Anti-Aliasing以提高「antiAliasType」屬性的易讀性(http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/閃存/文本/ TextField.html#的antiAliasType)。只需執行'myTextField.antiAliasType = flash.text.AntiAliasType.ADVANCED' – Atriace

相關問題