[轉]基于Starling移動項目開發準備工作

最近自己趁業余時間做的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過程中的一些問題和經驗。

轉載于:https://www.cnblogs.com/leoin2012/p/4478017.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257359.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言float輸出分數,c語言同一題目求解結果用float和int輸出值差1.

c語言同一題目求解結果用float和int輸出值差1.答案:3 信息版本&#xff1a;手機版解決時間 2018-12-08 22:35已解決2018-12-08 05:38c語言同一題目求解結果用float和int輸出值差1.最佳答案2018-12-08 06:01試試這樣就好了#include main(){long i;float j,j1,j2,j4,j6,j10;j110…

《構建之法》閱讀筆記02

今天我閱讀了《構建之法》4-6章。有許多的感悟。 以前編程序總喜歡亂命名變量&#xff0c;覺得自己看的懂就行了。但讀完構建之法第四章。我知道了程序是給別人看的&#xff0c;然后那只是程序比較簡單而已。如果一個程序過于龐大&#xff0c;而變量的命名有沒有實際的意義&…

2017-10-03 前端日報

2017-10-03 前端日報 精選 你需要知道的幾類npm依賴包管理看Zepto如何實現增刪改查DOM把cookie聊清楚6 Pro Tips from React DevelopersMulti-user experiences with A-Frameclintonwoo/hackernews-react-graphql: Hacker News clone rewritten with universal JavaScript, usi…

【樸靈評注】JavaScript 運行機制詳解:再談Event Loop

PS: 我先旁觀下大師們的討論&#xff0c;得多看書了~別人說的&#xff1a;“看了一下不覺得評注對到哪里去&#xff0c;只有吹毛求疵之感。 比如同步異步介紹&#xff0c;本來就無大錯&#xff1b;比如node圖里面的OS operation&#xff0c;推敲一下就可以猜到那是指同步操作&a…

c語言 strcpy原型,淺談C語言中strcpy,strcmp,strlen,strcat函數原型

實例如下&#xff1a;//strcat(dest,src)把src所指字符串添加到dest結尾處(覆蓋dest結尾處的\0)并添加\0char *strcat(char * strDest, const char *strSrc){char *resstrDest;assert((strDest!NULL)&&(strSrc!NULL));while(*strDest)strDest;while(*strDest*strSrc){s…

angular——更多按鈕的上拉菜單(路由跳轉)

<button class"btn gray_text_btn list_item" ng-click"action.toMoreOptions()"><i class"icon ion-navicon"></i> </button> <!-------------------- 底部按鈕 -----------------------><section class&qu…

Python版——博客網站四 編寫日志創建頁

2019獨角獸企業重金招聘Python工程師標準>>> 開源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 單從編碼來說&#xff0c;WebApp開發真正困難的地方在于編寫前端頁面。前端頁面需要混合HTML、CSS和JavaScript&#xff0c;如果對這三者沒有深…

c語言0-1勻分布隨機數,C++ generate_canonical均勻分布隨機數函數用法詳解

標準均勻分布是一個在范圍 [0&#xff0c;1) 內的連續分布。generate_canonical() 函數模板會提供一個浮點值范圍在 [0&#xff0c;1) 內&#xff0c;且有給定的隨機比特數的標準均勻分布。它有 3 個模板參數&#xff1a;浮點類型、尾數的隨機比特的個數&#xff0c;以及使用的…

第三十四天 how can I 堅持

“不要把所有的雞蛋放在同一個籃子里”是錯誤的&#xff0c;投資應該像馬克吐溫說的那樣&#xff0c;要把所有的雞蛋放在同一籃子里&#xff0c;并小心的看好他。---巴菲特。 那盆花還沒死&#xff0c;但是我又能做什么呢&#xff1f;技術。永遠的技術。睡覺。轉載于:https://w…

01-Swift 介紹

簡介 Swift 語言由蘋果公司在 2014 年推出&#xff0c;用來撰寫 OS X 和 iOS 應用程序2014 年&#xff0c;在 Apple WWDC 發布 幾家歡喜,幾家愁愁者:只學Object-C的人歡喜者:之前做過java/python/js語言的人歷史 2010 年 7 月&#xff0c;蘋果開發者工具部門總監 Chris Lattner…

2017—2018 實驗報告:實驗一

實驗一&#xff1a;實驗報告 課程&#xff1a;程序設計與數據結構 班級&#xff1a; 1623 姓名&#xff1a; 張旭升 學號&#xff1a;20162329 指導教師&#xff1a;婁嘉鵬 王志強 實驗日期&#xff1a;9月25日 實驗密級&#xff1a; 非密級 預習程度&#xff1a; 已預習 必修/…

病床呼叫系統有顯示屏c語言,病床呼叫系統畢業設計

內容介紹完整版大學病床呼叫系統畢業設計&#xff0c;已修改完格式摘 要醫院已經從人工管理模式向智能化方向發展。“病床呼叫系統”可以實現對病房的智能化管理&#xff0c;可實現呼叫、求救警報、信息存儲、顯示等等功能。患者在住院期間&#xff0c;可能會在任意時間請求醫…

1. mybatis批量插入數據

通過list <insert id"saveByList" useGeneratedKeys"true" parameterType"java.util.List"> insert into T_App_Default_User(UserID,AppType,CreateTime)values <foreach collection"list" item"item" index&quo…

iOS開發 - Swift實現清除緩存功能

前言: 開發移動應用時&#xff0c;請求網絡資源是再常見不過的功能。如果每次都去請求&#xff0c;不但浪費時間&#xff0c;用戶體驗也會變差&#xff0c;所以移動應用都會做離線緩存處理&#xff0c;其中已圖片緩存最為常見。 但是時間長了&#xff0c;離線緩存會占用大量的…

c語言結構體單元測試,C語言結構體單元練習.doc

C語言結構體單元練習1.有以下定義和語句&#xff1a;struct student{ int age;int num; };struct student stu[3]{{1001,20},{1002,19},{1003,21}};main(){ struct student *p;pstu;…… }則以下不正確的引用是 。A) (p)->num B) p C) (*p).num D) p&stu.age2.有以下結構…

如何開啟IIS7以上的“IIS6管理兼容性”

護衛神PHP套件的安裝&#xff0c;需要開啟“IIS6管理兼容性”&#xff0c; 那么&#xff0c;如何開啟IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢&#xff1f; 設置的時候&#xff0c;請參照如下截圖&#xff1a; 本文轉自黃聰博客園博客&#xff0c;原文鏈接&#xff1a;http://www…

pop to 特定的UIViewController

1. 我們可以推出到特定的UIViewController 2. 有一個類沒有navigationController&#xff0c;以前一般用delegate&#xff0c;我覺得我們可以把引用一個navigationController&#xff0c;然后使用它來推出另一個UIViewController轉載于:https://www.cnblogs.com/studyNT/p/4486…

藍橋杯:矩陣翻硬幣

題目地址&#xff1a;http://lx.lanqiao.org/problem.page?gpidT126 這道題強烈建議用java做&#xff0c;畢竟自帶BigInteger類。 此題看似是一道模擬題&#xff0c;但由于數據規模很大&#xff08;10的1000次方&#xff09;&#xff0c;只能找規律。規律是最終結果為sqrt(n)*…

ssh服務端口轉發詳解

端口轉發的概念和應用什么是端口轉發呢&#xff0c;我們知道&#xff0c;SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是&#xff0c;SSH 還同時提供了一個非常有用的功能&#xff0c;這就是端口轉發。它能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發&…

W ndoWs文件夾窗口,如何在本地網絡中訪問-Synology-NAS-上的文件-(Wndows).pdf

如何在本地網絡中訪問-Synology-NAS-上的文件-(Wndows)如何在本地網絡中訪問 Synology NAS 上的文件 (Windows)概述Synology NAS 經過專門設計&#xff0c;可快速簡單地在本地網絡中存儲和共享文件&#xff0c;讓您直接訪問 SynologyNAS 上的文件而沒有每次登錄 DSM 的麻煩。例…