Cocos2D-HTML5開源2D游戲引擎

http://www.programmer.com.cn/12198/

Cocos2D-HTML5是基于HTML5規范集的Cocos2D引擎的分支,于2012年5月發布。Cocos2D-HTML5的作者林順將在本文中介紹Cocos2D-HTML5的框架、API、跨平臺能力以及強大的性能。Cocos2D-HTML5是Cocos2D系列引擎隨著互聯網技術演進而產生的一個分支。該分支基于HTML5規范集,目標是可對游戲進行跨平臺部署。Cocos2D-HTML5采用MIT開源協議,設計上保持Cocos2D家族的傳統架構,并可聯合Cocos2D-X?JavaScript-binding接口,最大程度地實現游戲代碼在不同平臺上的復用。

Cocos2D-HTML5由Cocos2D-X核心團隊主導開發和維護,行業領袖、HTML5大力推動者Google為這個項目提供支持。Zynga、Google等大公司的工程師也參與到Cocos2D-HTML5的設計工作中,在各路高手的協作之下,Cocos2D-HTML5的技術方案和API設計正毫無疑問地朝著?大氣、簡潔的方向快速發展。

Cocos2D程序員可分為三類:苦逼程序員,把自己游戲針對iOS、?Android、Windows?Phone三大主流平臺分別用Objective-C、Java、C#移植一遍,不是熬夜換語言重寫游戲邏輯,就是學習不同語言為熬夜移植做準備;普通程序員,采用C++,一次編碼后爭取最大限度地在iOS、Android、Windows?8?Metro之間復用;而作為后PC時代的文藝程序員,我認為跨全平臺才是真的跨,配合Cocos2D-X?JavaScript-binding,最終目標是能夠實現Native?App和Web?Browser之間的輕松跨越。

圖1 Cocos2D-HTML5游戲框架結構

下文就細致地介紹Cocos2D-HTML5引擎以及如何玩轉它。

引擎的框架設計

Cocos2D-HTML5引擎框架的設計目標總結下來有兩個,第一個目標是?“偷懶”,引擎運行目標平臺是所有的平臺,無論是PC瀏覽器還是移動瀏覽器,;第二個目標還是“偷懶”,兼容Cocos2D系列引擎,讓已掌握開發要領的同學可以繼續偷懶,讓沒有學過的同學可以輕松悟透、輕松入門、晉級。

在引擎的框架設計中,渲染層是Canvas或WebGL,如果瀏覽器支持WebGL,自動優先選擇WebGL,運行速度會快一點,要是不支持也沒關系,Canvas通過性能優化后,比起WebGL一點也不遜色。

區別于其他Cocos2D系列引擎設計,Cocos2D-HTML5引擎框架引入了Dom?Menu的設計,瀏覽器支持多語言的優勢得到了傳承,開發者再也不用為游戲的多語言發愁了,再也不需要辛苦地到處找字庫、貼圖了,因為在引擎內已準備好了。值得注意的是,Dom實現的各項菜單還有各種動作和特效,甚至和Canvas可以實現互動,讓開發者一點都感覺不到Dom的存在。

圖2 UI Dom分層結構

引擎的API封裝和使用介紹

框架設計得簡潔明了,API當然也不能復雜,Cocos2D-HTML5在API的封裝上,直觀易懂,最大程度地保留原Cocos2D系列的API的使用習慣,保持發揚偷懶的風尚,使開發者可以在悟解框架之后輕松繼續晉級。

在引擎的設計和開發中,采用的是John?Resige類的繼承方法,在使用上類似于C++,適合原有Cocos2D系列的游戲資源進行快速1:1移植,我們的目標是實現機械式翻譯,因此期待自動翻譯的工具出現。

當然,Cocos2D-HTML5引擎面向的是Web,引擎在高級API的封裝上,根據JavaScript語言的特點重新進行封裝,滿足廣大前端程序員、JavaScript開發者的使用習慣:Write?less,do?more。

API足夠容易使用。在其代碼倉庫有專門的目錄,其中為開發者準備了各種Demo,所有的引擎功能都有對應的test?case展示其用法,開發者可以在這個基礎上快速掌握各種功能和特效的使用,還有更簡單的方式—直接拷貝組合應用于游戲開發中。

此外,引擎采用原生的JavaScript語言開發,可兼容其他成熟的JavaScript框架,開發者可以在引擎的基礎上自由選用合適的框架,加速游戲的開發進度。

引擎的跨平臺能力

在互聯網領域,各個瀏覽器之間存在大量的標準和不兼容,引擎一定要將這種耗費無謂青春的行為扼殺。在引擎的設計中,通過瀏覽器能力檢測和適配器模式,消除不同瀏覽器帶來的運行環境的差異,兼容不同瀏覽器的事件處理,抹平不同瀏覽器之間的各個坑,讓開發者能在平坦的道路上加速前進,快樂寫代碼。抹平了差異,再也不需要做重復無價值的工作,基于Cocos2D-HTML5開發的游戲終于可以輕松穿越操作系統運行在各瀏覽器上了。

采用Cocos2D-HTML5這類更高級語言引擎進行游戲開發,開發效率更高,加上豐富的工具集支持、實時的各種調試手段和云合作開發手段,更加直接的效果調校方式,完全沒有開發環境依賴,各種優勢的疊加,可以大幅度降低開發成本,提升游戲的上架速度。

如果覺得這樣還不夠,還有更好的選擇,引擎的高級API和Cocos2D-X?JavaScript-binding引擎API是相同的,同一份JavaScript游戲代碼不用修改或者小范圍修改,配合JavaScript-binding引擎就能以Hybrid的方式直接作為本地應用發布。

通過兩種發布方式的結合,Cocos2D-HTML5可實現立體覆蓋,通過它開發者就能以一個更快、更愜意的方式實現自己的想法。

引擎的性能

引擎通過一系列的優化措施,在設計之初就注重各項功能的實現和性能的有機結合,保證引擎在使用上沒有各種性能上的短板。

目前引擎通過優化,運行起來已符合“復雜”游戲運行的性能要求。但不可否認,引擎采用的是腳本語言,且運行在瀏覽器這個特殊的環境中,引擎的效率相對于本地應用性能會低一些。

HTML5游戲引擎中,WebGL性能夠強,可惜不是所有瀏覽器都能支持,要實現偉大的跨平臺目標,引擎就必須兼容性能次之的Canvas。還好Canvas的表現還不錯,經過優化,Canvas模式下引擎性能表現毫不遜色。

各項性能優化工作如圖3、圖4所示,如有更好的方案請不吝賜教。

圖3 優化之前的TileMap測試例(4400個Tile 8.7幀)

首先,從邏輯層面和渲染層面相互配合,引入DirtyRegion的方法,利用少量的邏輯控制,在耗時最大的渲染環節,不該重畫的部分堅決不畫。通過優化,需要做的事情變少了,渲染效率高了,帶來的更大利好是系統級別的省電,在移動設備上,這個優勢會變得日益明顯。

圖4 優化之后的TileMap測試例(4400個Tile 60幀)

其次,引擎利用臨時Canvas作為緩存,用來緩存需要大量渲染處理的圖層中間結果,頻繁使用時,直接復制,不需要經過繁瑣的步驟獲得。通過優化可提升渲染環節的處理效率,加速引擎在特定情景模式下的運行速度。

下面列舉一個性能對比的例子:在進行優化之前,運行TileMap測試例,4400個Tile構成的地圖,每次在畫面中顯示,都需要將無數多的Tile拼成一幅圖,再顯示出來,想想也知道會多么浪費資源。在Mac?Pro?13寸上的Chrome瀏覽器上,Canvas模式下只能運行到8-10幀。引擎通過圖層緩存來優化,效果立竿見影,相同環境運行幀率立刻就有60幀了。

那么就只能達到60幀嗎?其實不是,只有60幀是因為瀏覽器有幀率控制。為了看到極限速度,可以將Chrome的幀率限制關閉掉,硬耗CPU計算,可以看到這個測試例的滿負載幀率可達250多幀。不過,如此大的幀率已超出顯示器的顯示范疇,沒有實際意義,它只是用來告訴我們它究竟能跑多快。

圖5 關閉Chrome VSync的測試例(4400個Tile 251幀)

最后,引擎性能優化工作還體現在不可視區域渲染和像素級渲染的優化上。Canvas默認是畫出你要它畫的所有東西,是個忠實的執行者,不管你是否畫在了不可視區域內,不像OpenGL會把不可視區域自動優化掉。所以我們選用手動模式,優化之后效果也是非常卓越的。

至于像素級的渲染優化,在非拼接類型的Sprite、Label等資源,就可以應用這類型的優化手段了,其原理是避免了Sprite渲染位置處于在兩個像素之間,Canvas要去產生邊緣各是半個像素的渲染的情況,提高Canvas的渲染效率,同時還可以獲得更好的顯示效果。

通過優化前后顯示效果的對比,可以看出在優化之后,Canvas只需直接渲染顯示原始的資源圖片,而不需要做像素級別的調整處理。

圖6中,優化前人物褲子上的線本來是單個像素的寬度,結果顯示位置剛好在兩個像素之間,Canvas要運用虛影、疊加等各種手段在上面2個像素的區域模擬出1個像素的效果,可以說出力不討好。

通過優化,Canvas可以避免這種嚴重浪費資源的情況,直接渲染加載圖片,提升Canvas的渲染效率,同時獲得沒有虛影的更佳顯示效果。當然,需要拼接的資源不能采用這樣的優化方法,防止出現渲染真空地帶,但很多類型的游戲,存在大量不需要拼接的資源,有廣闊的運用空間。

在Canvas模式下,引擎還優化了Tint的功能,通過圖層拆分得到紅、綠、藍和黑色四個基色的圖層,然后通過數學方式疊加得到想要的各個顏色效果,避免了用像素級別渲染這種效率極低的方式來實現Tint功能,從而大大提高了Tint功能的執行效率。

當然,這里討論的都是Canvas模式,用WebGL實現這個功能同樣無壓力。

在瀏覽器支持WebGL硬件加速模式下,引擎的壓力就小很多了,其渲染性能遠遠高于Canvas模式,各種優化措施更加齊全,這里就不一一列舉了。通過性能優化,引擎渲染環節占用的時間縮到最小,引擎可以支撐更復雜的游戲流暢運行,各種更炫的效果也更多,各位開發者在使用時就不會有如履薄冰的感覺了。

圖6 優化前后的顯示效果對比

結語

經過各方不懈的努力,現在Cocos2D-HTML5引擎終于踏出了堅實的第一步,目前已經發布了Alpha版本。

可能很多人還在抱臂觀望HTML5的游戲發展,?而Cocos2D-HTML5游戲引擎已經出發了,我們會將《捕魚達人》游戲移植到Cocos2D-HTML5,讓這個游戲來進一步趟平瀏覽器上各種各樣的坑和引擎的Bug。

時間之梭沒有停止,各類型設備計算能力正飛速提升,運行性能上的約束會越來越小,Cocos2D-HTML5憑借其在開發便捷、成本低和發布渠道多樣化的優勢,會獲得越來越大的應用空間,變成游戲開發者優先考慮的游戲引擎,很快就有這么一天到來,不管你信不信,反正我們是.相信了,并在為之努力。

Cocos2D-HTML5項目還處于初期階段,如果開發者在使用時遇到問題,歡迎登錄http://www.cocos2d-x.org論壇提意見。作為開源項目的Cocos2D-HTML5要想走得更遠,離不開大家的幫助。

作者林順,開源引擎Cocos2D-X的共同創立者和核心開發者,目前負責Cocos2D-HTML5開源引擎項目的開發,致力于構造一個跨多平臺和跨瀏覽器的游戲框架。

本文選自《程序員》雜志2012年06期,未經允許不得轉載。如需轉載請聯系 market@csdn.net

《程序員》2012年雜志訂閱送好禮活動火熱進行中

轉載于:https://www.cnblogs.com/zsw-1993/archive/2013/02/21/4880377.html

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

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

相關文章

illustrator下載_Illustrator筆工具練習

illustrator下載Adobe Illustrator is a fantastic vector creation tool and you can create a lot of things without ever using the Pen Tool. However, if you want to use Illustrator at its full potential, I personally believe that you need to master and become …

怎么更好練習數位板_如何設計更好的儀表板

怎么更好練習數位板重點 (Top highlight)Dashboard noun \?dash-?b?rd\ A screen on the front of a usually horse-drawn vehicle to intercept water, mud, or snow.儀表盤 名詞\ ?dash-?b?rd \\通常在馬拉的車輛前部的屏幕,用來攔截水,泥或雪。…

學習正則表達式

deerchao的blog Be and aware of who you are. 正則表達式30分鐘入門教程 來園子之前寫的一篇正則表達式教程,部分翻譯自codeproject的The 30 Minute Regex Tutorial。 由于評論里有過長的URL,所以本頁排版比較混亂,推薦你到原處查看,看完了如果有問題,再到這里來提…

人物肖像速寫_去哪兒? 優步肖像之旅

人物肖像速寫In early 2018, the Uber brand team started a rebranding exercise, exploring a fresh take on what it means to be a global transportation and technology company. A new logo was developed in tandem with a bespoke sans-serif typeface called Uber Mo…

js獲取和設置屬性

function square(num){ var total num*num;//局部變量 return total;}var total 50;//全局變量var number square(20);alert(total);//結果為50function square(num){ total num*num;//全局變量 return total;}var total 50;//全局變量var number square(20)…

hp-ux鎖定用戶密碼_我們如何簡化925移動應用程序的用戶入門— UX案例研究

hp-ux鎖定用戶密碼Prologue: While this is fundamentally a showcase of our process in the hopes of helping others, it’s also a story about the realism of limitations when working with clients and how we ultimately were able to deliver a product the client w…

微信公眾號無需二次登錄_您無需兩次解決問題-您需要一個設計系統

微信公眾號無需二次登錄重點 (Top highlight)The design system concept can be differently defined according to each person’s background. Designers may say that a design system is a style guide while developers may say it is UI standards, or specs, or even as…

android中AsyncTask和Handler對比

1 ) AsyncTask實現的原理,和適用的優缺點 AsyncTask,是android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現異步操作,并提供接口反饋當前異步執行的程度(可以通過接口實現UI進度更新),最后反饋執行的結果給UI主線程. 使用的優點: l 簡單,快捷 l 過程可…

視覺工程師面試指南_選擇正確視覺效果的終極指南

視覺工程師面試指南When it comes to effective data visualization, the very first and also the most critical step is to select the right graph/visual for the data that you want to present. With a wide range of visualization software that is available offerin…

在 Linux 下使用 水星MW150cus (RTL8188CUS芯片)無線網卡

Fedora (如果你不使用 PAE 內核,請去掉 PAE 字樣):yum install gcc kernel-PAE kernel-PAE-devel kernel-headers dkms Ubuntu: apt-get install make gcc linux-kernel-devel linux-headers-uname -r安裝原生驅動 注意:由于在 Li…

問題反饋模板_使用此模板可獲得更好,更有價值的UX反饋

問題反饋模板Feedback is an important part of UX design. To improve the work you do you need to be able to give and receive feedback. Receiving valuable feedback is for a very large part up to you.反饋是UX設計的重要組成部分。 為了改進您的工作,您需…

【轉載】Android Animation 簡介(官方文檔翻譯) ---- 翻譯的很好!

http://vaero.blog.51cto.com/4350852/849783轉載于:https://www.cnblogs.com/DonkeyTomy/articles/2945687.html

ubuntu 如何轉換 ppk ,連接 amazon ec2

轉 自 :http://www.ehow.com/how_8658327_convert-ppk-ssh-ubuntu.html1 Open a terminal window in Ubuntu, or log in if you are converting the keys on a remote Ubuntu server. 2 Type "sudo apt-get install putty-tools" at the terminal prompt …

iofd:文件描述符_文字很重要:談論設計時18個有意義的描述符

iofd:文件描述符As designers, many of us think we’re just visual creatures. But creating visuals is only half of the job. The other half is verbal communication — actually talking about design. Whether we’re showcasing our own work, giving or receiving c…

保護程序猿滴眼睛-----修改VS 2008 編輯器顏色 (修改 chrome瀏覽器的背景色)

前幾天更改了 chrome 的背景色后,雖然有些地方看起來不和諧,想百度的首頁,顯示出了大快的圖片區域,但是,整體感覺這個顏色設置真的對眼睛有一定保護作用。。。 所以,再順便修改一下 經常用的 vs2008 編輯器…

數據可視化 信息可視化_可視化哲學的黎明

數據可視化 信息可視化Note: this is the foreword of the book Data Visualization in Society (Amsterdam University Press, 2020)注意:這是《 社會中的數據可視化 》一書的前言 (阿姆斯特丹大學出版社,2020年) Geographer John Pickles once wrote …

HTTP 錯誤 404.2 - Not Found 由于 Web 服務器上的“ISAPI 和 CGI 限制”列表設置,無法提供您請求的頁面...

詳細錯誤:HTTP 錯誤 404.2 - Not Found. 由于 Web 服務器上的“ISAPI 和 CGI 限制”列表設置,無法提供您請求的頁面. 出現環境:win7 IIS7.0 解決辦法:IIS的根節點->右側“ISAPI和CGI限制”->把禁止的DotNet版本項設置為允許…

重口味動漫_每種口味的圖標樣式

重口味動漫The icons are, without a doubt, one of the most used graphic elements today in the interface design of digital products. And to make this statement with some degree of certainty, we do not even need a very robust statistical analysis. Just rememb…

JSP入門

一、什么是JSP? JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag)&#xff0…

初學c++

看了兩章不到。。隨意記錄下。 #include<iostream> #include<string> using std::cout; using std::endl; double calculation(double a,double b,char op) {switch(op){case : return ab;case -:return a-b;case *:return a*b;case /:return a/b;}}double num0;do…