Skip to main content

[AS3] Embedding font's glyphs from SWF files

進入到 AS3 世界後,越來越多畫面是由 Script、Components、XML Model 與 CSS stylesheet 組成,embeded fonts 變成動態文字應用很重要的一環。

要在Flash or Flex 中 Embed fonts 有相當多的作法,光官方的 Help 就有幾種寫法:
Flex 3 live doc:
Embedding fonts from SWF files
Using embedded fonts
Flash :
Embedding fonts
google 上還有一堆...

embed 英文字型檔是很簡單的,但是遇到中文字就會是一場惡夢...要使畫面好看,撇除 embed 整包中文字型,轉而打包特定使用到的中文字來供全部畫面使用,作法是由 Embedding fonts from SWF files 參考而來。
以下方法不管 Flex or Flash CS3都適用,至少可以省下相當的檔案大小...
  1. 打開 Flash CS3,開新 AS3 檔案, 使用工具箱建立一個動態文字框到畫面上。選擇需要 embed 的中文字型,點選 文字物件的屬性面板上的 『embed』:

  2. 跟 Flash 8 作法一樣將要 embed 的中文字打在『Include these characters』的輸入框內:

  3. 到這邊跟官方的作法都一樣,唯一輸出的差別是如果要供ActionScript project 使用的話需要將做好的動態文字框按滑鼠右鍵『covert to Symbol』:

如果是用 Flash CS3 製作專案,留在 Library 就可以了。而 Flex的ActionScript Project 需要發佈 SWF 到你所在的路徑然後:
[Embed(source='customedFonts.swf', symbol='customedFonts')]
public static const myFonts:Class; //其實修飾子看個人使用


Flex MXML project: (如同官方說明)

<mx:Style>
@font-face {
/*將文字崁入*/
src:url("customedFonts.swf");
fontFamily: "華康儷細黑";
}
.testStyle{
color: #FFFFFF;
font-size: 22px;
font-family:華康儷細黑;
}
</mx:Style>


上面字型檔只 embed "今天氣很好"
測試:Flash CS3 customedFonts 留在 Library
var format:TextFormat= new TextFormat();
format.font= "華康儷細黑";
format.size=30;
format.letterSpacing=3;
var myTextField:TextField= new TextField();
myTextField.embedFonts= true;
myTextField.autoSize="left";
myTextField.defaultTextFormat = format;
myTextField.text="*這些都不會出現*今天天氣很好";
addChild(myTextField);


output 畫面:

Comments

  1. 請問可以寄這個[AS3] Embedding font's glyphs from SWF files 的範例給我嗎,因為我在用 flash檔時, src:url("style/font1.swf");這個地方都會錯試了很多次都沒成功。如果可以的話寄到uiokllk@ms53.hinet.net謝謝

    ReplyDelete
  2. 那個用法只能用在 Flex MXML project (By Flex Builder )喔! Flash 的用法請看 1-3點....

    ReplyDelete
  3. 沒錯啊我是要用在flex 裡面,我flash檔的製做是造1~3點,但我在flex裡面
    mx:Style
    @font-face {
    src:url("customedFonts.swf"); <---這一直出錯 fontFamily: "華康儷細黑";
    }

    ReplyDelete
  4. 錯誤訊息是什麼?我原始檔早就不知道到哪去了...- -

    ReplyDelete
  5. 出現
    Multiple markers at this line:
    Unable to transcode style/font1.swf
    font 新細明体 with normal weight and regular style not found

    ReplyDelete
  6. 你要 embed 的新細明體注意一下是不是按到 B 了... 就是輸出到粗體...他錯誤訊息寫的很清楚捏...他找不到正常版的字體...

    ReplyDelete
  7. 恩,已經不會錯了,但我要用在button上面的文字很向不會出來。請問是要另外用嗎

    ReplyDelete
  8. 原來是我自己用錯了,已經搞定了,謝謝 *_*

    ReplyDelete
  9. Erin妳好,想問一下嵌字體的問題 :D

    我在嵌入中文字的時後,遇到先前uiokllk所提到的問題,我嵌的是"微軟正黑體", 照著上述的步驟製作,最後還是出錯,我也沒設定到粗體字之類的東西

    後來我以相同操作步驟以英文字體來嵌入英文字,卻是成功嵌入沒錯誤

    請問一下,是不是嵌中文字型的話,還需要多加什麼設定嗎? 一直找不出來哪裡錯,好煩丫~~~ >"<

    麻煩高手出手相救一下,謝謝~~~~ Orz

    ReplyDelete
  10. 你的原始檔寄給我吧...不然我也沒辦法

    ReplyDelete

Post a Comment

Popular posts from this blog

[Unity] erinylin.lazylib - Cookie for PlayerPrefs

有鑑於 PlayerPrefs 測試與版本更新問題,將大家都愛用的 PreviewLabs.PlayerPrefs 打包起來,製作重點還是以懶人為主,基本上 PlayerPrefs 資料更新與數量並不可能會有強烈衝擊效能的狀況產生,所以為了方便開發,就弄了一個視覺化工具,方便除錯用。

雖然 PreviewLabs.PlayerPrefs 作者都宣告放棄他們的版權,不過為了尊重程式,僅僅加入了兩個公用函式,其他並無更改。

內有:
Cookie ManagerCookie 用 DataObject 混合編輯 ScriptableObject執行階段除錯視窗工具當然還是有懶人常數檔案輸出資料版本控制,方便更新版後儲存資料更新功能其實很多,有興趣的請自行到 Github 下載並參考範例吧!

PureMVC 我也會 [1]

為什麼要學 PureMVC ? 明明網路上一堆免費的 MVC 微型框架,為什麼 Erin 特別愛用 PureMVC?
嚴格說起來,使用 PureMVC 開發的專案寫出來的 class 檔一定比 一些簡化版 PureMVC base 的 framework 如 Robotlegs 多,也比較難入門,但是為什麼要特別推薦它?

答案很簡單,越基本的東西反而是最好延伸,留白越多的紙最好畫!也因為如此才令人著迷啊...(咦?)

百分百真情推薦:
大家的職責切分的很乾淨...棒訊息傳遞機制是好物由於架構超然於 Flash / Flex 架構上,反而在 team work 分工的時候更方便擁有多個程式語言的版本,想要入門其他語言是個不錯的選擇Source code 公開化,要改要加什麼隨便你~~出來的時間比較久相關資源多
接下來就來看圖說故事。
PureMVC Diagram, 出處:PureMVC 官網

當初第一眼看到這張圖的時候,真的挺像個變形蟲,不過想要快速了解 framework 的基本運作流程,最容易的方法就是看圖說故事...

PureMVC 核心是由四個單例(singleton design pattern) 組成: Facade, Model, View and Control,唯一出入口就是 Facade,你會發現圖示中 Model, View and Control 都是雙向指向連接到 Facade,它們互相不清楚其他人的存在。

這四個 Class 你也只需要認識 Facade 即可...=)

Facade :
圖示中, Facade 下方有三個圈圈分別是 Mediator, Command and Proxy,意思是所有實作這三種 class instance 都是透過 Façade 來註冊移除或取用其他資源。拿 Flash 來比喻, Facade 很像是 root,所有的 DisplayObject 顯示、操作和移除都可以透過 root 抓取實體後執行,所有實體都可以透過 root 去找到其他實體。在 PureMVC 中, 它最大的作用就是切開 MVC 彼此的依賴,也提供 user 一個統一的操作出入口。

Model, View and Control
你會發現這三個大圈圈旁邊都有一堆同色的 Proxy, Command and Mediator,當各自的 class inst…

[AIR] JoSiResize - Mobile 開發小工具

JoSiResizev0.6.0,Adobe AIR 3 runtime之前開發 tool app 的時候並沒有很深刻的體認到圖片素材的 resize 是一個很麻煩的事情...畢竟圖片使用量並不大,等到開發遊戲類的 app 才發現光處理不同螢幕尺寸的圖片素材是一個相當折磨人的工作。
因此 JoSiResize app 誕生了~~~原理是採用最小 scale 長寬比例不變的方式進行放大縮小。使用方法非常簡單,設定好變更的尺寸,接下來,將需要處理的圖片檔案全選直接拖曳到視窗內,畫面即會跳出預備儲存的檔案夾選擇畫面,確認後即開始轉檔。