2008年9月16日星期二

Flash 技巧 - 字體資料轉換與解析方式   [+/-]

相信大家應該都看過 fontpark 2.0 網站了吧
基本上,它是透過後端程式取得 font glyphs 向量資料的
才能夠做到隨意縮放不失真

至於該如何從 TTF 取出資料呢?
資料格式又該使用哪一種呢?

其實網路上有不少工具可將 TTF 轉為 PostScript、SVG、... 等等
相較起來,PostScript 語法需要自行去解析
而且 PostScript 有些繪圖動作可能是 Flash 做不到的

AS3 有支援 E4X,同時 SVG 繪圖的資料語法與 AS graphics API 比較相近
解析起來也更容易些
可以使用的工具有 Java Batik SVG ToolKit

不過後來又發現還有更好用的方式
那就是 ActionScript Viewer
千萬不要以為它只是反編譯程式的工具喔
它還可以將嵌入的字體輸出 TTF、SWF、ActionScript Data
看到 ActionScript Data 了吧,意思就是連解析都不用!

那麼事情就變得很簡單了,只要製作一個 SWF
裡面嵌入想要用的字體,輸出 SWF,丟到 ASV 內
取出 Font Glyphs 資料
實際輸出的資料格式如下:

利用 AS 將 Font Glyphs 資料重新畫出來:

Ticore's Blog

因為是用標楷體,所以筆畫重疊的地方會反白
相對有好有壞,這樣可以做到把每一個筆畫都拆成獨立的物件呢!

最後,還有一個可能的方式,連 font glyphs 資料都不用轉出來
請參考本 Blog 第一篇
利用 Flash Javascript API 作批次輸出靜態文字 swf
利用 Flash JavaScript API,多做一些動作:
打散文字、全選、分布到不同圖層去、將每個圖層的物件轉為單獨的 Sprite、....
到時候只要將這些 SWF 直接讀入,就有分好的 Sprite 物件可以用
是不是更方便呢!

Read more...

2008年9月15日星期一

Flash CS3 Compiler Bug   [+/-]

Ticore's Blog

這個問題其實去年就遇到了,只是最近又有人遇到類似的問題
再仔細探討發生原因,順便做的紀錄

Bug 重現步驟如下:

  1. 使用 Flash CS3 建立一空白的 fla (as3) 文件
  2. 與 Cairngorm.swc (Cairngorm 2.2.1 or 2.2) 放在同一個資料夾下
  3. 影格一寫一行 trace(123); 程式
  4. 編譯測試影片就會得到以下的錯誤訊息
1046: Type was not found or was not a compile-time constant: WebService.
1046: Type was not found or was not a compile-time constant: RemoteObject.
1046: Type was not found or was not a compile-time constant: HTTPService.

這個實在蠻詭異的,fla 文件內完全沒有用到 Cairngorm 的類別
甚至連 ActionScript Classpath 都沒設
Flash IDE 就自動去找到 Cairngorm.swc
然後自己掛在那邊~~

Read more...

2008年9月12日星期五

Flash TextField 選擇性嵌入字型子集共享   [+/-]

Ticore's Blog

Flash 的文字欄位可以選擇性嵌入字集
但是當文字欄位很多的時候
變的很不容易集中管理

其實在一個 swf 檔案內由文字欄位嵌入的字集是可以在不同文字欄位之間共享的

前提是:

  • 文字欄位的字體、文字樣式 (Bold、Italic)、點陣風格與否要一致
  • 被分享字體的文字欄位本身要具有 embedFonts 屬性,可以藉由設定嵌入一個空白字元達到
  • 假如使用點陣風格的話,字集也必須要相同才可以共享

實際測試範例:

測試原始檔案下載

Read more...

2008年9月9日星期二

覺得 AS3 太困難?不妨試試看 SimpleAS3!   [+/-]

Ticore's Blog

SimpleAS3 提供了很簡單的 function
讓你可以做到讀取外部資料、圖片、跳頁等等..

eg.

 var loader = this.loadChild( "images/button.png" );

loader.onClick(function()
{
        getURL( "http://www.example.com/", "_self" );

}); 

SimpleAS3 簡介
SimpleAS3: It Doesn’t Get Any Easier Than This!
http://flashspeaksactionscript.com/simpleas3-it-doesnt-get-any-easier...

SimpleAS3 網站
http://simpleas3.com/

SimpleAS3 Documentation
http://simpleas3.com/documentation/

Read more...

2008年9月4日星期四

Flex 技巧 - 將 NumericStepper 上下按鈕變灰   [+/-]

Ticore's Blog

Flex 內的 NumericStepper 組件,在遇到 Value 等於 Maximun or Minimum 時
NextButton, PrevButton 仍然是 Enable 狀態
這樣很容易讓使用者混淆,多按了好幾下才知道已經到底了
以下分享一個簡單的做法,可以讓 NumericStepper 到底時
自動將 NextButton, PrevButton Disable

MXML Code:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="horizontal" verticalAlign="middle" backgroundColor="#FFFFFF" fontSize="12">
 <mx:Script>
  <![CDATA[
   import mx.core.mx_internal;
   import mx.controls.NumericStepper;
  ]]>
 </mx:Script>
 <mx:Label text="Before Disable Btn:" />
 <mx:NumericStepper />
 
 <mx:VRule height="100%" />
 
 <mx:Label text="After Disable Btn:" />
 <mx:NumericStepper>
  <mx:creationComplete>
   <![CDATA[
    var target:NumericStepper = event.target as NumericStepper;
    target.mx_internal::nextButton.enabled = target.value < target.maximum;
    target.mx_internal::prevButton.enabled = target.value > target.minimum;
   ]]>
  </mx:creationComplete>
  <mx:change>
   <![CDATA[
    var target:NumericStepper = event.target as NumericStepper;
    target.mx_internal::nextButton.enabled = target.value < target.maximum;
    target.mx_internal::prevButton.enabled = target.value > target.minimum;
   ]]>
  </mx:change>
 </mx:NumericStepper>
</mx:Application>
<!-- Ticore's Blog - http://ticore.blogspot.com/ -->

線上範例:

Read more...