2012-10-19 127 views
6

我看到很多與字體嵌入在閃存有關的問題,我似乎無法找到我的問題的答案。As3字體嵌入

我從字體swf中加載字體並將它們註冊到高級別,以便它們可以在子swf中使用。問題是swf也可能嵌入這些字體,但不是明確的,這意味着它們只是嵌入的,因爲子swf中的字段使用某些字體的某些字符。這意味着子項中的文本字段使用不完整的嵌入字體,而不是在父級或任何級別的祖父母中註冊的嵌入式完整集。這也意味着可能成爲這個孩子的孩子的swfs將無法獲得完整的字體。

我的問題: 有沒有什麼辦法可以告訴flash在編譯時不會在任何情況下將字體嵌入到swf中?如果沒有,是否有一個工具,從編譯的SWF中刪除嵌入的字體?

這裏有幾件事情我已經考慮過/注意到迄今:

  • 看來,如果每個字體類綁定到ApplicationDomain中。 (確認這將有所幫助)
  • 在文本字段中使用設備字體不會導致嵌入任何字體。 (不是我的選擇,但是因爲我需要字段從父SWF在運行時嵌入字體。)
  • 我找不到一種方法來註銷字體或只是告訴加載的子swfs使用父字體,這將是適用於加載的子swfs。
  • 可能可以在允許字體的父定義覆蓋子定義的不同上下文中加載子項。 (或者會有兩個定義,如果有的話,哪個優先?)
  • 從孩子的圖書館中加載資源並將它們添加到舞臺上將獲得字體的父定義。 (這是有道理的,因爲資產是在孩子的域外部創建的)
  • 一個可能的解決方案可能是不向swf的編譯文本字段添加任何字符,但這不是一個真正的選項,因爲我需要使用任何字體的靜態文本。

我已經開始形成一個關於可能不正確的問題的定義,所以如果有必要的話,請回過頭,給我一個關於這個問題的不同觀點。到目前爲止,我上面提到的問題似乎是一個正確的問題,如果解決方案有問題,我的所有問題都會消失。

謝謝!

+0

我有點笨,我以爲我理解你的問題,並且正在輸入答案,然後我意識到如果我完全理解你的問題,我不是100%確定的。你能提供一些代碼,它有助於爲我繪製更清晰的圖像。 – Taurayi

+0

你想要將每種字體嵌入到自己的swf中,然後在需要時動態加載swf? –

+0

我想在加載任何視圖swfs之前加載任意數量的字體。這部分不是問題。問題是將字體從子swfs中取出,以便在子swfs之前加載的字體可以在子swfs中使用,並且不會與子字體的swfs定義衝突。 – Jordan

回答

0

原來,這是我的版本的Flash Professional的錯誤。我做了更新,運行時共享字體現在是可能的。我可能會在一個糟糕的網址爲字體,則字體將來自父應用程序域指向共享的字體,因爲它們不會被編譯到子SWF文件。我現在正在使用Flash Professional CS5.5 11.5.1。我正在使用CS5.5 11.5.0。

http://forums.adobe.com/message/3926344

感謝的Adobe浪費我的時間。

+0

那麼他們固定和記錄它,不是嗎? –

0

如果我理解正確,比想要刪除/取消註冊那些已經加載但嵌入另一個swf的特定字體版本不完整的所有字體?

每個嵌入的字體都會創建一個類,通過Loader類加載的每個swf默認都會加載到其自己的應用程序域中,以防止名稱空間衝突,但是您可以強制加載器將所有內容加載到當前應用程序域用Loader的load()方法的»loader context«參數。因此,您可以嘗試強制相同名稱空間中的類相互重疊,但是您無法控制要丟棄哪個類,這意味着您無法檢查哪種字體具有更多字形。 (也許它只是拋出錯誤而不是覆蓋,並且根本不運行,我對此並不確定)。

另一方面,您應該詢問字體實際上是如何嵌入到孩子的swf文件中的。我知道的比嵌入字體,因爲沒有其他辦法:

在* .fla文件,文件

爲»庫符號«, 或flashbuilder的代碼或彎曲這樣的: [Embed(source="c:/windows/fonts/verdana.ttf", fontFamily="Verdana", embedAsCFF="false")]

或本:

@font-face { 
    src: url("../assets/MyriadWebPro.ttf"); 
    fontFamily: myFontFamily; 
    advancedAntiAliasing: true; 
} 

在MXML文件。所以(這是我猜的)所產生的所生成的類的名稱依賴於»FONT-FAMILY«財產由開發商給出的(或者更多的設置),意味着即使相同的字體嵌入兩次講座名稱可能因設置而異。

也沒有Font.unregisterFont()方法,所以如何管理這個問題仍然是一個很好的問題,以防萬一您可能以某種方式找到相同的Font類(也許RegExp變成友好的幫手)。

我覺得要解決這個正確的,你需要在編譯時控制,使用基於* .xfl項目文件可能會幫助,但甚至比所引用的字體,文件可以有不同的名稱XML。

一個很好的問題,運氣好的話

+0

感謝您的回覆。當動態文本字段設置消除鋸齒功能以動畫或可讀性,這實在是煩人,因爲你只能得到在字段中輸入的幾個字符,字體嵌入也會發生。此外,靜態文本會導致將用於編譯到swf中的字體定義爲不帶字符,因此使用靜態文本字段也會阻止該swf(或應用程序域)中的任何內容使用該相同Font的父定義。我今天早些時候開始研究解壓縮flas,但是感謝您確認這是一個可能的解決方案。 – Jordan

+0

還不知道這個,但很想知道 – philipp

0

我有很多的使用帶閃光燈的字體問題。在不同的瀏覽器以不同的方式呈現html時,它仍然是一個問題。

不管怎麼說,閃光,我建立了這個工具包,幫助了我很多。檢查如何自定義您的字體。如果你做了這些步驟,我很確定這個問題會得到解決。

https://github.com/tbwa/AS3-Toolkit/tree/master/src/com/utils/text