最近自己趁業余時間做的flash小游戲已經開發得差不多了,準備再完善下ui及數值后,投放到國外flash游戲站。期間也萌生想法,想把游戲拓展到手機平臺。這兩天嘗試了下,除去要接入ane接口的工作,小游戲本身不用做任何改動就可以遷移到android和ios手機平臺。只是在手機上,游戲的掉幀情況非常嚴重,遠達不到pc上的體驗效果。看來做flash移動游戲,不用starling框架是不行的。打算這幾天學習下starling,對項目進行改造。
?
基于Starling移動項目開發準備工作
轉自: Starling中文站 - Starling移動開發教程
作者: 郭少瑞(NeoGuo)
現在移動開發可謂熱火朝天,如果您是一位Flash開發者,或許您所在的團隊,已經開始基于Flash內容的移動應用開發了。由于Adobe已經提供了AIR打包技術,來幫我們把同一份程序打包到iOS,Android,BlackBerry等系統或設備,這在很大程度上降低了跨平臺的研發成本,也為傳統的Flash研發團隊進入移動開發領域提供了很好的機會。但是有機遇,也有麻煩。其中一個比較大的麻煩就是性能問題。現在的PC平臺都有很強大的計算能力,我們基于Flash的應用開發,一般不太關心性能問題,但進入移動設備,我們會發現自己面臨的硬件環境相當苛刻(當然現在的智能機硬件配置已經大大改善,讓我們開發上的限制已經寬松了許多)。比如我們基于傳統思路,用Flash電影剪輯等方式做了一個應用,在PC上預覽沒有問題,但在移動設備上卻不能很好的執行(出現丟幀現象,這是顯示渲染的壓力太大所致)。為什么會出現這種情況?因為Flash中傳統的顯示列表機制(Stage,Sprite,MovieClip),都是依賴CPU的,也就是說渲染壓力基本都在CPU上。在移動設備上CPU處理能力低下的情況下,出現丟幀的現象也就不足為奇了。
能改善這種情況的一種方式就是利用GPU加速,也就是利用顯卡在圖形方面的計算能力,減輕CPU在屏幕渲染上的壓力。但悲劇的是,Adobe在“為傳統的顯示列表機制提供GPU加速”這個工作上進展緩慢,之前曾推出了在配置文件中增加<renderMode>GPU</renderMode>的設置來開啟硬件加速,但不要激動,這個設置對于PC無效,對于移動設備也是限制多多,而且并不穩定。筆者曾經在一個項目中分別設置CPU和GPU模式來測試程序(iPad 1),發現CPU模式反而運行效率更好且穩定。出現這樣的情況相當讓人沮喪,Adobe的技術團隊也專門寫過一篇Blog來解釋其中的難度之大:Flash在之前的架構設計上完全是基于于CPU的(通常我們稱之為軟解),也就是說傳統的2D顯示列表就是為CPU渲染設計的,這對于跨平臺來說非常有效,但現在要遷移到GPU上就非常麻煩了。
這對我們來說,就意味著如果我們之前有一個復雜的,基于Flash傳統顯示列表的應用或游戲,想要原封不動的移植到智能設備上,而且還要保證和PC相似的執行效率,還是挺困難的。當然Flash盛行了這么多年,開發者也積累了很多行之有效的經驗,來提升運行效率(比如基于Bitmap的動畫實現,以空間換時間),這些經驗可以幫助我們在一定程度上改善現有應用的執行效率。但可能還不夠,移動設備的特性決定我們需要盡可能的將優化做到極致。要做到這一點,我們必須更有效的利用GPU。當然Adobe也意識到GPU對于提升渲染性能的重要性,所以推出了Stage3D。Stage3D雖然也做了抽象(解決平臺無關性),但無疑是和硬件更接近的,基于Stage3D我們可以開發和桌面游戲相媲美的網絡3D游戲。當然因為Stage3D是偏底層的API,學習和掌握的成本也高一些。關于Stage3D本文不做過多介紹,如果您還不了解Stage3D,建議參考下面的文章:
- Stage3D 翻譯系列之一: Stage3D是如何工作的(一)(概念篇)
- Stage3D 翻譯系列之一: Stage3D是如何工作的(二)(深入篇)
- Stage3D 翻譯系列之一: Stage3D是如何工作的(三)(完結篇)
當然正如其名,Stage3D是面向3D應用的API。如果我們只是想做2D應用,是不是就不能使用Stage3D了呢?當然也是可以的,但編程和實現思路將和我們之前的Flash經驗大不相同,我們需要完全站在顯卡的角度去編寫實現過程,這無疑將是枯燥而且困難的,而且有很高的學習成本。所幸的是,一些具備探索和分享精神的技術達人,在Stage3D的基礎上做了進一步的封裝,以更接近傳統Flash 2D顯示對象的機制,來提供對傳統Flash開發者更加友好的技術框架。這樣的框架已經存在一些,比較知名的有Starling,ND2D等等。其中Starling得到Adobe官方的推薦,其接口也和Flash原有顯示對象非常接近,所以筆者也選擇了Starling來進行項目實踐,并和大家分享這個過程中的經驗。
Starling是由Gamua團隊推出和維護的一個基于Stage3D的2D框架。這是一個位于奧地利的團隊,有兩位核心開發成員:Daniel Sperl和Holger Weissb ck。他們擅長Objective C和ActionScript,也正是因為這樣,他們實際上有兩個開源框架:Starling Framework和Sparrow Framework,兩個框架的設計思想是一樣的,只是前者面向Flash,后者面向iOS。
下載,安裝和配置
工欲善其事,必先利其器,讓我們先把“武器”準備好。這里的武器是指我們的IDE,考慮到大多數Flash開發者應該都是基于Flash Builder進行編程的(Flash Professional實在不適合編程,其它第三方IDE比如Flash Develop,當然也很優秀,但為了文章簡練起見,不再涉及其它IDE了,如果您使用其它IDE,請參考IDE的幫助,整合最新的AIR SDK即可),我們就以Flash Builder為準,來介紹后面的操作步驟。
請安裝最新的Flash Builder 4.6,這個版本已經支持移動項目創建,并且包含了最新的Flex SDK 4.6(PS:我們后面的討論里不包括Flex框架或Flex項目,只是在Flash Builder中任何類型的項目都是依賴Flex SDK來編譯的),但是內置的Flex SDK 4.6包含的是AIR 3.1的SDK,而對于移動設備的Stage3D支持則是在AIR 3.2中實現的。所以這個地方我們要做一下調整,替換Flex SDK中的AIR的部分。
操作步驟:
- 進入Flex SDK目錄(Win下面是{您的安裝路徑}\Adobe Flash Builder 4.6\sdks\),您的最新版本應該是4.6,將4.6復制一份,命名為4.6_AIR3.2
- 從Adobe官方下載最新的AIR SDK,地址是:AIR SDK下載
- 下載后解壓縮,覆蓋4.6_AIR3.2
- 啟動Flash Builder,打開窗口->首選項->Flash Builder->已安裝的SDK,新建一個SDK配置,目錄指向剛才創建的4.6_AIR3.2,并設置為默認SDK
- 新建一個ActionScript手機項目,觀察主應用的XML配置文件的命名空間(比如主類是Main.as,那么配置文件是Main-app.xml),如果命名空間是,則代表配置成功
然后我們需要下載Starling。當然跟所有的ActionScript類庫一樣,我們可以使用它編譯后的SWC,也可以使用它的源碼。這里筆者建議大家盡量使用源碼,因為作為一個新生框架,Bug是不可避免的,一旦有問題,我們可以追蹤源碼來發現和解決。如果用SWC就沒有這個便利了。
目前Starling官網( ),提供的穩定下載版本是1.0,從這里下載。然后還有一個正在開發的版本,在github托管,地址:經測試發現,目前Github上的版本也比較穩定,而且Demo里帶了一個iOS的實例,如果您做移動開發,可以嘗試用github上的最新代碼版本。
下載源碼后,可以通過Flash Builder創建一個庫項目,包含Starling的源碼,Flash Builder會自動將代碼編譯SWC。然后您可以創建一個ActionScript手機項目,在構建路徑->庫路徑這個界面上,引用剛才創建的庫項目即可。
剛才也說到,源碼中是附帶了例子的,如果您下載的是github上的源碼,里面還有一個專門的iOS的例子。如果您已經具備了Flash開發經驗,那么看這個例子無疑是快速了解Starling使用方式的最佳途徑。
請遵循下面的步驟啟動這個例子
- samples目錄實際上包含兩個例子:demo和demo_ios,其中demo_ios需要依賴demo的資源,在后面的步驟中需要注意。
- 在Flash Builder中創建一個ActionScript手機項目,類型可以設定為iOS,平臺為iPhone,然后引入上面創建的Starling庫。
- 在源碼設定部分,將demo/src和demo_ios/src兩個目錄全都設定進去,然后設置啟動的Application為demo_ios/src/Startup_iOS.as。
- 如果沒有提示編譯錯誤,那就表示配置成功,可以用Flash Builder的模擬界面進行測試,可以看到如下的界面:
如果您想在真實設備測試,就要分情況而言:如果是Android設備,比較簡單,通過自建證書打包為APK,安裝到Android設備即可;如果是iPhone或iPad ,就麻煩一些,您需要一個蘋果認可的簽名證書才能完成打包,這個證書需要注冊蘋果開發者賬號并付費才能獲取,具體過程參見James Li的教程,這里不再細述。
今天就到這里,后面我會繼續和大家探討使用Starling過程中的一些問題和經驗。