1. 程式人生 > >如何學習一種開發框架

如何學習一種開發框架

謝邀。

如果按照 優秀的程式設計師和一般的程式設計師差別在哪? 的定義來看,你已經是個程式設計師了。

我接觸的許多程式設計師中,絕大多數都是知其然不知其所以然,做了AS好幾年的,甚至連AVM是什麼都不知道的太多了。許多程式設計師把快速開發出成品作為是工作的唯一目標,認為研究底層知識和周邊技術是浪費時間。很多東西他們不是不能知道,而是不想知道。

更有甚者,學會了 gotoAndPlay 就敢說熟悉 Flash,會敲 ls 就敢說精通Linux。前幾天有朋友發給我他膜拜了一日的逆天簡歷,上面洋洋灑灑寫著彙編、C/C++、Linux網路程式設計、JAVA EE、Perl、Bash、Python、Windows驅動開發、微控制器開發、HTML、CSS3、JavaScript、PHP、cocos2d-x、iOS開發、安卓開發……
而且所有的專案的級別都是 精通

我看完簡歷和朋友說:這位前後端桌面嵌入式系統驅動網頁手機開發通吃的全棧神人10年裡跳槽8次,從沒在一個公司幹滿過2年,你敢用麼?

======上面廢話,不看也罷。

剛巧我也是從AS3轉到了cocos2d-x,說說我的經驗吧。

一、cocos2d-x 部分

1.1 技術選型

從第三個手遊開始,我實在被Adobe的ANE和國內的小平臺折騰得沒了脾氣,決定轉到cocos2d-x。在選擇哪種語言繫結的時候糾結了很久,最後力排眾議選了 lua:Cocos2dx+lua合適還是Cocos2dx+js合適? cocos2d-x 2.x 的lua繫結做得並不好,於是我選擇了 quick-cocos2d-x
(後來,quick被觸控收購)。

1.2 學習 C++

C++ Primer 中文版(第 5 版) (豆瓣) 是不錯的入門書籍,建議看第五版,我寫過一篇 C++Primer 第4版和第5版比較 。學習期間建議畫一些思維導圖幫助理解和整理思路。例如這個(不完整):

1.3 學習DEMO和熟悉開發平臺

編譯 cocos2d-x 自帶的 TestCPP 專案,全部跑一遍。熟悉 cocos2d-x API 的用法。記得用doxygen 生成文件,建議每個API的功能都瀏覽一遍。

有的同學可能更喜歡直接看原始碼,那當然更好。不過文件有一個好處就是能更直觀地顯示繼承關係。

在學習DEMO的過程中,你必須熟悉自己開發平臺的IDE,例如Windows上必須熟悉 Visual Studio,而OS X上必須熟悉xcode,Linux平臺上就熟悉Eclipse+CDT吧。

注意,quick-cocos2d-x 是不支援Linux開發平臺的。


2014-05-17更新:quick已經使用QT重寫了player部分,但依然不支援Liunx平臺。

1.4 瞭解引擎的資料夾結構

基於 cocos2d-x 原始碼生成的文件並不怎麼詳細,許多功能必須看原始碼。但這個階段,我不建議糾結原始碼太深,倒是可以糾結一下 cocos2d-x 的資料夾結構,看看各個類放在什麼地方,找一找常見的哪些巨集和常量以及列舉定義在什麼地方,這花不了多少時間,但能讓你對cocos2d-x有更深刻的瞭解,同時給你很強的成就感。這種成就感沖淡了你面對大量原始碼時候的無力感,讓你能夠繼續前行。

下面是我的分析:

1.5 重複上面的第3步:再次學習DEMO

這時候看DEMO可能會輕鬆不少,但是你會有更多的問題去糾結。例如多解析度支援?例如座標系統?例如繪圖功能?例如層級管理系統?例如事件傳遞系統?等等等等……這時候可以去Google(注意不要用百毒和其他搜尋引擎)找文件看了。我推薦一些我看過的不錯的文件和部落格:

許多部落格都是極好的。紅孩兒(後來加入了觸控)寫了許多原始碼分析,每一句原始碼都加了註釋。雖然我不太認同他這種吃力不討好的方法,但對於新手來說確實是有很大的幫助。


另外在 Stack Overflow 你能找到絕大部分問題的答案。當然,許多問題是針對 cocos2d 而非 cocos2d-x 的,不過用法相同,照看不誤。許多優秀的文章都是基於 cocos2d 的,所以,不要介意,可以先花半天時間熟悉 OC 的語法,能看懂即可。


暫時不要買中文書。我曾經花3天時間看完了 《Cocos2D-X遊戲開發技術精解》 《cocos2d-x手機遊戲開發–跨iOS、Android和沃Phone平臺》 ,發現作者其實就是來賺稿費的。

忘了廣告了,我的部落格(cocos2d-x | zrong's Blog)也有一些cocos2d-x內容,歡迎來噴。


1.6. 熟悉工具集


現在你應該對周邊工具感興趣了。例如幀動畫使用什麼製作?BMFont使用什麼製作?骨骼動畫呢?plist檔案怎麼編輯?碎圖用什麼工具拼合?有些專案上,你有許多選擇,也可能沒得選。去Google吧,如果遇到選擇上的問題,歡迎找我討論。


二、 quick-cocos2d-x 部分

2.1 現在就到lua時間了


請認真讀完 《Lua程式設計(第2版) 》 第一、二、三部分。第四部分可暫時不讀。

1.2 熟悉 quick-cocos2d-x 的資料夾結構

相信有了上面 cocos2d-x 的基礎,這個應該不難理解。

1.3 跑完 quick-cocos2d-x 自帶的所有sample

在這期間,熟悉 framework 中的所有封裝。可以參考 quick網站 quick wiki

1.4 學習匯出API給Lua使用

匯出 C/C++ API 給 Lua 使用

三、學習 OpenGL ES

熟悉Lua部分之後,作為一個有志於成為程式設計師的碼農,依然要回到C/C++來,這裡才是 cocos2d-x 的本質。

cocos2d-x 使用 OpenGL ES 進行渲染的,如果要對 cocos2d-x 的渲染層進行任何形式的擴充套件,你完全避不開 OpenGL ES。

既然逃不開,那就對TA說,請張開雙腿,我要上。

3.1 閱讀 OpenGL ES 2.0 Programming Guide


下面是這本書的官網,目前已經出了 OpenGL ES 3.0 版本,cocos2d-x 使用的是2.0。


這本書寫得淺顯易懂,非常適合新手。有位網友花3個月時間翻譯了中文版,但還是建議你不要看了。


這裡是 OpenGL ES 的 官方文件 API中文翻譯


當然,你也可以買那本著名的 OpenGL 紅寶書 《OpenGL程式設計指南(原書第7版)》 來看,不過 OpenGL ES 相對與 OpenGL 來說還是有一些不同的,你要知道如何區分這些不同。


3.2 嘗試理解 cocos2d-x 的渲染部分架構

相關的類我就不列出了,我正在醞釀一個這方面的系列文章準備發到部落格上。如果寫完了,我會在這裡更新。

3.3 自己寫一些濾鏡、繪圖功能的擴充套件

例如這個: cocos2d-x-filters

四、迴歸專案

到了這裡,你可以開始你的專案了。雖然原始碼還沒有讀完,但相信整個架構都能理解了。在做專案的過程中,再去一點點讀原始碼是比較快捷和我能夠接受的方法,否則就太枯燥了。

你可以還需要選擇一下cocos2d-x相關的工具。你可能聽說過 CCB(cocosBuilder)和CCS(cocoStudio),嘗試瞭解她們,再決定是否使用她們。

你已經有了AS3的基礎,這樣許多前端的概念和經驗已經很豐富了。這些經驗在cocos2d-x中同樣適用。但是要注意的是,cocos2d-x不是AS3,不要試圖用AS3的方法去使用cocos2d-x。

  • 有位碼農在從C#轉到AS3的時候向我抱怨:為什麼Flash Builder沒有Visual Studio的這個功能那個功能?
  • 然後這位碼農在從AS3轉到Sublime Text(用於Lua編輯)的時候向我抱怨,為什麼Sublime Text沒有Flash Builder的這個功能那個功能?
上面是個笑話。

同時,為了解決一些cocos2d-x沒有提供的功能,你必須去學習相關的知識。例如這個:在 cocos2d-x 中使用 libcurl 實現上傳檔案功能(附quick-cocos2d-x封裝)。不過你現在已經有了基礎,學習這些不是難事。

在有時間的時候,可認真讀一下上面提到的《Lua程式設計(第2版) 》第四部分,瞭解Lua和C語言通訊的方式,順便看看cocos2d-x裡面是怎麼實現的。

另外,一些你需要的引擎中沒有的功能,也可以順手實現了開源出來(例如這個:一個LuaSocket封裝),說不定你需要的東西正好是別人也需要的。

五、熟悉釋出平臺

既然是做手遊,Android和iOS平臺是逃不掉了。

你要熟悉Android和iOS平臺的特點,熟悉JAVA在Android上的應用,熟悉Objective-C在iOS上的應用,熟悉Eclipse ADT和XCode(上面應該已經熟悉過了)。

你還要熟悉Google Play和AppStore的釋出流程以及方針、政策,內購的接入、SDK的嵌入。

你要學習和各個接入平臺的程式設計師、商務、前臺小妹打交道(因為經常會找不到你要找的真正的負責該SDK的技術人員),你要能忍受國內小平臺糟糕的文件、程式碼規範和逆天的程式設計方法。

終、沒有終點

上面說的並不完整,應該遺漏了不少東西,但我只能說這麼多了。因為我的經驗也止於此。

祝你成功!

======下面廢話,不看也罷。

感覺你的導師對你還是很負責的,話說我多麼希望我有一個這樣的導師在剛剛入行的時候隨口點撥我幾句啊!!!

現在我有時也會給同事一些建議,但願他們真的聽懂了。