flash 8 裏10個我最需要的功能

In flash   August 15, 2005 - 12:44 am

難得一天沒事正好來整理一下這個版本中那些功能是我覺得最重要的。

首先要瞭解 flash 8 是 authoring tool 與 player 同時更新,因此這裏所列的10點是同時包含兩者,並且依重要性排列。

另外,一般普遍的認知是這個版本比較偏向designer的需求,例如Image API等各種效果,但以我站在Enterprise Application開發的立場來看,仍然覺得這個版本裏許多所謂的 eye-candy 繪圖功能是很重要的,因為在製作custom controls (components)時,類似傳統 GDI library的繪圖能力可以協助工程師快速達到許多重要的視覺效果,例如shadow或inner bevel/knock out等,而不用像以往一般用數十行Drawing API只為了模擬一個3D border。

1、File Upload/Download

yes, yes, yes !!!

這是幾個月前第一次實作成功範例程式時心中狂喊的聲音,終於盼到了內建的檔案上/下傳功能,更棒的是它可以做到以往要用 multi-part 處理的多檔案上傳,而且有很多完整的event 可監測傳輸過程的狀態,雖然它仍然要依靠底層containter(例如 browser, IE/Firefox/Safari)的http stack去傳檔案,但也著實比之前用的yamaxxxx元件好太多了。

兩年前做喜來登飯店電子看板系統時因為那個CMS需要大量上傳的功能,因此我們實驗性的採用了yama桑的upload 元件,而偏偏這個元件很天兵的用了大量css/javascript來達成檔案上傳,不但browser相容性低,而且傳輸過程就像玩俄羅斯輪盤會不會成功全看運氣,最後只好認命的在server端想辦法多檢查幾次才過關;結案後這件事就成為我心中永遠的痛,也成為首要待解決的問題,後來我們的team改用C# + flash寫了一個上傳模組才算真正解決這個麻煩,不過再怎樣也比不上macromedia原廠就內建這個功能啊~

所以這絕對是新版本中最需要、最重要、也最實用的新功能,我已經迫不急待開始改寫整個flash CMS。
(btw, 下次順便內建 screen sharing 功能如何?)

2、GIF, PNG, and JPEG support

這也是千呼萬喚始出來的功能,現在終於可以在flash 裏用loadMovie()載入gif, png與jpg圖片了,再也不需要在server端先即時轉換格式再送出jpg stream;另外flash player 8本身也可以當作一個 png/gif viewer, 只要將圖檔往上面一丟就會顯示出來,所以將來如果能直接吃SVG也不會太奇怪。

這個功能加上前一項 file upload,讓許多CMS類的事情變的很容易,功能實作性也大增,對工程師這一塊的flash 玩家來說確實是個好消息。(附帶一提,之前曾問過gary grossman為何搞了幾年flash player還是不能載入gif/png ?當時得到的答案居然是:因為這兩個codec要license fee,而且會增加player體積 -_-”)

3、Slice guides (9-slice scaling)

這個功能可以將一個movieclip用四條線做井字型分割,進而決定延展時的方向與改變幅度,最大的意義就在於從此 re-scale一個mc時,再也不會出現邊線變粗或比例失真的情況。

而對平常寫元件來說,也不需要辛苦的將一個panel 切成三塊,然後用一堆程式碼去做 resize()的工作,只為了能保持panel的線條比例正確(想想看,一個panel要三塊,通常一個breeze式的window 元件要三個panel組合,這就代表每次一resize()時,畫面上是同時有 9塊mc在移動/重排/對位)。

這也代表者元件的skinning會更簡單,大概是史無前例的容易,也不需用到像BJC component裏那種『神奇』的stretcher mc,設計師只要做好一個圖型,直接用slice guide分割好就完工了。

4、FlashType 與 text API

flash type的本名叫 Saffron,是跟 Mitsubishi Electric Research Labs (三菱電機研究所, MERL)授權取得的字型顯示技術,主要特色就是可以在LCD等數位顯示器上非常清楚的顯示字型,不會有毛邊、鋸齒、羽化等效果。

通常中文因為每個字筆畫多每個stroke的間隔本來就少,再加上密密麻麻排成一片通常都會變的很難閱讀,usability就大幅下降,客人看沒幾行就跑掉了,但有了saffron後,我用10點的中文字排滿一個畫面仍然可以清楚的閱讀內容,實際操作看到的效果確實很驚人,這應該是flash player八個版本以來最大的字型技術改良。

另外textfield 部份新增了幾個API,在計算字間距、行距等操作上更方便,可以省掉許多的dirty hacks,也算是一大樂事。

5、Image API

這個項目裏其實含蓋了一狗票新增的點陣圖處理功能,其實最重要的變革就是flash player裏內建了一個 bitmap engine,因此可以提供許多GD 函式,就像flash 5時出現的Drawing API一般,可以讓user自已畫圖案,因此如果你曾經用lineTo(), beginFill()之類的function畫過圖案,現在你可以用 beginBitmapFill()來畫點陣圖了。

這個項目裏包含了 Filters, Blend modes, stroke properties, gradient control, Bitmap caching等,也可以直接將 fireworks 的檔案匯入,並且最重要的是可以保留在fireworks裏設定的 effects;例如我在fireworks裏畫了一個長方形,套了inner bevel 與 drop shadow兩個效果後存檔,當我將這個png匯入flash時,不但圖案本身匯進來了,bevel與shadow兩個效果也一併接收,而且可以在flash裏接者調整參數,更棒的是還可以用程式碼來控制它。

所以這代表什麼呢?

設計師們可以在fireworks裏用慣用的視覺方式設計好所有的圖案(包含效果),然後直接匯入flash裏接者做動畫,再也不需要在photoshop裏做好一堆效果後用psd2fla把點陣圖匯進flash然後忍受灰灰髒髒的毛邊跟龐大的體積;而寫程式當吃飯的工程師們,則可以快樂的用程式碼控制這一切視覺效果,不論是filters, blend或bitmap drawing,都可以用程式碼完成。

所以在不久的將來,我們一定會看到類似 as2lib這樣的drawing library, 裏面有數十種包裝過的API可以畫圓型、距型或其它各種奇型怪狀的圖案,這種一般都被稱為 API 的 API,end user只要會用 draw3DRect(x,y,w,h)就可以畫出一個漂亮細緻的長方型。

至於對我而言,這些Image API代表的意義有二:

-許多以往夢想而做不到的效果現在都可以輕易實現,例如半年前曾試圖用flash開發一組元件,可以模擬mac上的group box,裏面需要用到inner shadow與knock-out,在mac的世界裏它是很爆力的透過Core Image去即時更新畫面,因此畫這些shadow與knock-out效果根本是小事一件,但在flash的世界裏,這就代表辛苦的用photoshop製作好需要的圖片再匯入用程式碼修改。現在有了Image API,我只花二十分鐘就完成當初浪費一個星期想做到的事 -_-”
(ok, ok, 我知道學習與成長是俱備不可逆性的,凡走過必留下痕跡,只是我不想背後有專案業主追殺時還得花時間去換這種心得啊~)

-我們終於擁有類似 avalon/GDI/Core Image 一般比較像樣的 Graphic Library,可以比較隨心所慾的操控畫面上的圖素,這點在製作商業程式內的元件時實在太重要了;當然,這也代表者許多以往硬弄出來的東西現在沒理由不用新API重新改寫了。

6、全新的 Garbage Collection (GC)

GC一直是flash player的痛,過去的版本中它的priority太低,並且清除的方式是 ref counting,因此經常會出現如果object與object間有cross ref時,GC會無法正確判別並清掉所有不用的物件。

新版中GC的方式改成 full garbage collection,並且是漸進式的清垃圾,不會一次發動結果導致flash VM完全停頓無法做其它的事。

這代表的意義是日後flash VM執行的效率會更好,memory leak的情況會降低,並且不會佔用太多的系統資源,工程師也就不用擔心flash程式的生命週期太長,出問題的機率會垂直上升的情況了(當然,如果程式本身結構寫太爛,那再神的GC也救不了啊,除非它聰明到看勢不可為時乾脆直接關機,畢竟不能跑的程式就沒有當機的問題~)

7、External API (NPRuntime) for AS2

這個功能主要就是取代以往的 FSCommand,提供全新的方式讓 flash 與 html/javascript做溝通,根據把玩的結果,這組API可以讓flash與javascript直接以flash nativ object溝通,也就是你可以從flash傳一個(未序列化處理的) array出去給javascript, 而javascript也可以在處理完後將外部的array直接傳回flash。
(仔細看清楚這段喔,它們倆是直接在傳 array, 而不是string)

當初剛看到這種效果時,以為External API也改用AMF在傳資料,才有可能直接將native object在兩邊丟來丟去,但後來想想,如果真是這樣那macromedia勢必在javascript那端也要implement AMF adaptor才能接檔案啊,這種工程太耗大想必mm不會傻到走這條路。

結果後來才發現,原來 External API會偷偷在html頁面執行一段序列碼,將javascript的complex datatype序列化成 xml再傳進flash,同樣的,flash要傳類似array這樣的結構出來時,也是在內部就序列化成xml,所以它們倆共同的語言是xml而不是AMF。

不過對我而言,我看的同樣不是 flash < -> html間的溝通,因為這件事的意義不大,以往早就有許多好方法可以做到類似的效果。我看的主要是這個External API也可以用來跟其它的宿主(container)溝通,例如當C#/C 包住一個swf時,這組API就可以提供 flash < -> C# 間的溝通管道,由於C#本身有很完善的xml serializer,因此至少可以省掉一半的序列化工作。

8、Video方面的改良

-on2 vp6: 這是macromedia新買來的video codec,在幾個月前的文章已介紹過,這裏就不多說;另外比較值得注意的是macromedia還很大方的提供了多組video encoder工具,有獨立的軟體也有plugin可掛到各大NLE上,當然如果還不滿意,on2併購進去的 flix 也是個好選擇。

-Alpha channel: alpha channel大概是video editing裏面最基本也最常見的效果,一般會稱做chroma key或matt,也可以稱做藍/綠幕效果,總之就是將畫面中的主題保留,然後背景去掉,像電視上的虛擬攝影棚或各種合成畫面就可以用這個做出來。因此以後勢必會看到一堆這種去過背的flash video在網頁上播放。

-flv 格式改良(cue point): flv的全名是 flash video,說穿了就是 SWF的一種,只是用來播放連續影像,而新版中加了許多必備的功能,例如cue point, meta data等。

簡單來說,studio 8的發表網站就是flash video非常良好的應用示範,它成功的將video這個元素自然的整合進網頁中,成為提供資訊的協助角色,讓訊息更生動、完整的傳達進讀者腦中,而不再是以往惹人厭的動畫效果,這是非常值得高興的轉變,未來我們也將會試者在專案中多整合類似的元素,讓flash video成為一個 info enabler而不是一個 stumbling stone。

9、32 軌音效 (16 stereo)

以往flash 能播的音效數非常有限,現在有了32 mono track 音效,可以做的事一下子多很多,例如你可以寫一個 flash版的 cubase, logic,也可以做一個線上DJ混音器讓user上傳自已的wav,mp3,midi檔進行同步大混音之類的事。

雖然對多媒體或設計這一行來說,less is more, but more is sometimes much better :-)

10、其它

-Advanced library panel:

以往每個library都是獨立的面板,現在終於可以全部收在一個面板裏,這點對經常需要大量 external library的工程師來說特別重要,因為即使我的螢幕解析度是 1600*1024,也常被一票library給塞滿然後還是找不到要用的那個。

另外現在也可以直接從components panel拖放元件到library panel裏了,再也不用先將元件放到舞台上,然後再刪掉它,只為了將元件加到library裏。

-SWF Metadata:

這點特別的重要,flash的property面板內多了兩個欄位可以供設計師輸入此檔案的摘要資訊,這些資訊將來可以被search engine檢索並記錄,讓「flash site無法被搜尋」這個假像徹底被打破。

當然,這世界上仍然會有一票人很堅持先做出 xhtml版的網站,再用同樣的資料餵給flash去生成flash版web site, 這樣google永遠可以找到 xhtml版的內容,但user則可以看到flash的生動畫面。

===

總的來說,對工程師而言,flash 8應該是最輕鬆的一次升級,它不像flash 5到flash 6時整個actionscript 語法大改變(開始採用 dot syntax),也不像 flash 6 到 flash 7時出現全新的 actionscript 2語言與V2 Components。

這次的升級,基本上只要花幾天摸熟Image API跟file upload等功能大致上就告一段落,可以將心力轉回專案與產品開發,唯一不同的是從此以後我們擁有了更完整的繪圖能力,因此不論是設計介面、元件或視覺效果時可採用的選擇就更多。

接下來真正要期待的就是今年底的Flash 8 updater與明年初的AS3正式面市,當然,這中間可能還會穿插flashcom 2.0與flex 2.0的上市,跟zorn的beta(裏面獨立的mxml compiler !),所以真正值得興奮的還在後頭吶~

10 features i need most in flash 8, a brief review

by admin

3 Comments Add your own

  • 1. Brian&hellip  |  August 16th, 2005 at 12:05 am

    寫的真是詳盡.雖然我沒時間寫哈哈.

    還是推!

  • 2. gloria&hellip  |  February 7th, 2007 at 7:17 am

    原來那個我用的很高興的loadMovie()載入jpg圖片的功能是flash 8才有的。本來以為在flash裡面做一些事情應該不難,後來發現很多時候並不是。這次好險:Q

  • 3. jeremy&hellip  |  February 8th, 2007 at 1:20 am

    呃 誤會啊,flash 本來就可以載入 swf 與 jpg,只有 gif/png 兩種格式是在 Flash Player 8 時才加入的。

留言回應

hidden

您的留言會先經過站長認証後才刊登在網站上。
your comments will be approved by Administrator before appearing on the page.

Trackback this post  |  Subscribe to the comments via RSS Feed

mobile phone