開場
Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework。最大優點在於使用GPU做圖形的運算,讓Flash的效能能夠到之前的1000倍(官方說法)!另一大優點是易學,使用跟Flash native API類似的類別,方法,架構等,讓原本熟悉Flash的開發者可以很快的上手。
提到Starling Framework,不得不提一下另外一隻鳥:Sparrow Framework,是一套iOS上的遊戲開發Framework,特點是"inspired by the Flash API",雖然是使用Objective-C,但很多概念都跟使用Flash API很像。而Starling Framework則是"a port of Sparrow to Flash",把在iOS上成功的經驗移植回Flash,結果就變成了"port a Flash-port back to Flash"。
原理
前面提到的Stage3D API,相信大家都看過Flash Player 11跑出來的3D效果,效能快1000倍真的不是隨便說說的。但Stage3D顧名思義,不就是跟3D有關的API,如何打造出2D的Framework?原理其實很簡單,大家知道3D的構成,基本上就是由一堆三角形建構出3D的模組,然後再加上貼圖,就成了我們看到的3D物件(當然還有打光等等的就先不談)。而Starling的基本,就是由兩個三角形組成一個四邊形Quad,再貼上材質Texture,就成了我們看到的2D物件啦。畫三角形跟貼材質就是GPU很擅長的工作,交給它,Flash就比以前快1000倍啦。既然原理跟3D很像,在使用上,Starling跟其他的3D Framework,例如PV3D,Away3D等等的View一樣,有自己的一個世界,一個顯示範圍,也有自己的一套DisplayList。在Starling裡,有自己的Stage,所有的DisplayObject都在這個Stage底下。在Flash Player 11裡面,顯示的層級大概如下圖:
Starling的DisplayObject都會在Stage3D那一層,而Flash native的DisplayList則在上方。由於Starling的手冊以"native"來稱呼Flash原有的API或元件,用來跟Starling區別,因為很多類別同名但卻是不同的體系,接下來我也會以這個字來區分(其實前面已經開始用啦!)。
很像但卻不一樣
一開始提到Starling除了效能外,另一大優點是使用上跟原來的Flash API很像。但這也是一開始學Starling要特別注意的:很像意味著其實是不一樣的!由文件可以看出,Starling有自己的Stage,Event,Sprite,MovieClip等等的類別,注意他們的繼承樹,從最基本的Object以後,就完全是自己的類別了。所以即使很多屬性跟方法都跟native的很像,但是Starling的DisplayObject跟,native的DisplayObject不一樣,無法加到native的DisplayList底下;Starling的Event跟native的Event是兩個系統,它沒有capture phase,bubble出去也不會被native的Stage收到;Starling的MovieClip是個DisplayObject,但卻不是DisplayContainer,所以沒有addChild等方法來加東西進去,也沒時間軸的概念,靠的是一組Textures變換,來達到動畫效果,所以也可以想像成它只能搭配SpriteSheet來做逐格動畫;Starling的Sprite跟native的比較像,但要注意所有的DisplayObject的rotation屬性的單位都是弧度而不是角度。玩Starling一開始就要認清楚,他是活在自己的世界裡。頂多透過nativeOverlay與nativeStage來跟外面的世界連接。萬一真的需要在同一個as文件裡用到兩個同名的類別,則必須使用完整的package路徑來區別,例如flash.display.MovieClip與starling.display.MovieClip。
相關資料
列出一些我這幾天參考的資料與蒐集到的資源:
官網:所有東西的起點。
下載:常常修正或添加新功能,github這邊可以找到最新的版本。
文件:當然一定要掃過一遍。但可能有些新增的屬性或方法沒放上去。
Tutorial Book:ByteArray的介紹文,一些Demo,重點是裡面有個PDF說明書,一定要下載下來好好看一下,裡面說明了很多細節,程式碼教學等等。雖然有121頁,但花個一天應該是可以看的完。
介紹影片:要快速來個Hello world可以看這影片來學,尤其是使用Flash Builder來開發的。
論壇:卡關的時候請到這。
FlashDevelop與Flash Player 11:nutsu的安裝設定教學。目前FlashDevelop 4.0 RC2自動下載Flex SDK4.5.1與AIR3.0已經是最新的了。注意發佈設定[Compiler Options] tab的[Advanced/Additional Compiler Options]這地方要加 -swf-version=13 的設定。
FlashDevelop的Hello world:Abiyasa的Hello world教學,使用FlashDevelop的看這邊。
外掛:很多熱心人士寫的Starling外掛或相容的API。
粒子效果外掛:下載了才能使用粒子效果的功能。
Particle Designer:官方推薦的粒子產生器,要錢的,但也可輸出給iOS用,限Mac OS使用。有開發iOS App的可以考慮買。
線上粒子效果產生器:好用!
GlyphDesigner:Bitmap Fonts產生器,要錢,Mac版。
Bitmap Font Generator:免錢,Windows版,陽春但可用。
TexturePacker:產生SpriteSheet與Texture atlas的工具,要錢,有分Windows與Mac版,有Essential版可以免費使用,但swf import的部份屬於需要付費的功能,所以輸出時會隨機把兩格貼上奇怪的文字圖,但測試時可以先拿來玩。開發者或是有寫部落格的可以試著申請免費授權看看。似乎有聽說以後Flash要加上Sprite Sheet的功能,若不是很想花錢的可以注意相關的消息。