早年開發游戲必須用C++,這沒得說,2000-2004年,java還沒有nio,其他動態語言不抗重負,只能C/C++能開發出完整可用的游戲服務端。直到2005年,韓國的游戲很多都還是純C++寫服務端,金山之前也開發過很多純粹C++的游戲服務端,后來大家都切了。
現代選擇有很多:java + javascript, c+python, c+lua, scala, go, erlang。我們面向性能的服務器用 java,面向邏輯服務器 python,面向高並發的會選擇 scala,次一級高並發或者性能測試程序(機器人)會選擇 gevent。那是不是我們就不用C++呢?我們用 C來做網絡,不用C++,但是C的比例在所有代碼中占比有限。
這是否意味我們可以放棄C/C++了?也不是:C語言是一把鋒利的匕首,而現代動態語言是一把長劍。平時匕首可以藏在身上,大部分時候用長劍披荊斬棘就夠了,但當你碰到堅硬的石頭,長劍不管用了,那么拿出匕首來果斷的切碎他。
對於一個成熟領域而言,我的建議是盡量用更高級一點的開發語言,因為游戲開發很多核心技術都有了較為妥當的解決方法。大量的服務端邏輯其實都是在等待,等待網絡,等待數據庫,這種情況下用C得不償失。但是服務端有一些地方還是躲不開C/C++,比如當服務器涉及到 3D計算的話(國內很多2D服務端,國外很多3D服務端),大量的矢量矩陣,除了用C++封裝出一套好用的數學庫外,即便直接用java寫,那也是很麻煩的。再比如現在快速動作越來越多,為了讓玩家操作更流暢,我需要基於 UDP快速可靠協議,協議開發用 java或者scala,性能上是沒辦法滿足要求的,況且協議實現后要和客戶端通信,你沒法讓所有客戶端跟着你一起用java/scala。再比如某些cpu密集的抽象度高的模塊,如 aoi或者 ai模塊。
對於一個新興領域而言,C/C++很多情況下是你別無選擇的東西。比如移動化浪潮剛起步的時候,還沒有啥 cocos或者 unity你真要開發游戲,你必須迅速的使用起 OpenGL ES和 OpenSL,然后再疊加某一腳本,以快制勝,第一批移動浪潮上發財的就是這些游戲。又或者,你可以根本躲開,先不介入,等到幾年后cocos和 unity成熟了,你在介入用lua / C#寫程序。再比如服務端你如果離開熟悉的游戲和web,去開發一個陌生的領域,如流媒體服務,你會發現這怎么和10年前的游戲一樣呀,什么高級工具都不給我用用,這時你可以再等個四五年應該高級工具會出現,異或你想領先別人時,你就果斷的拿出 C/C++來解決之,這就是C獨有的開拓新領域能力。
大部分答案都是非黑即白,非此即彼。不要只會C不會動態語言,避免成為一個傻逼;也不要只會動態語言不會C,避免離開熟悉的溫室就活不下去。對於一個新手而言,如果什么都沒學過,我的建議是先用快速開發的東西,把項目弄起來再說,有精力有機會的情況下,也不能完全放棄一些基礎的東西,讓自己殘缺了。
PS:在相同架構下,就純粹性能而言,各種語言性能差距到底是多少呢?如果只開發回合制這些慢節奏游戲,或者HTTP接口,大部分情況都在等待數據庫等待用戶消息的話,差別確實不大,的確可能5%都不到。如果cpu密集了,那么可以參考下面的圖表,總體來說是10-50倍的性能差別:
有人問,說了半天,這個也不行,那個也不完美,而我時間有限,有沒有一個更經濟實惠的方法呀?如何才一次性達到彼岸呀?時間有限項目吃緊有沒有更好的選擇?我說有啊!那就是 java。
國內游戲開發繞來繞去還是腳本+C+erlang+go,難道大家就不會其他東西了么?大部分可以的情況下,除了非用C/C++,我推薦各位認真考慮下 java,這個性能上最接近C的東西,能承當大部分cpu密集型事務,卻又不會象c那樣 crash了找都找不到問題在哪里。同時面向高並發時基於原生jvm的 scala可以提供類似 erlang的簡單方式,函數式編程 & 大規模並發協程 & actor;同時 java可以很方便的同 javascript結合,js的速度應該是動態語言里面最快的吧。再者 java還有 groovy,可以提供 python/ruby的泛型編程,用超高的開發效率和 python/ruby媲美,同時還能和 scala 結合實現高並發。最重要的是寫 java好招聘,到處都是寫 java的工程師,大部分語言級的培訓都可以省略了。
國內游戲開發者很多拒絕學習 java,因為很多開發者自己是碰都沒碰過。現在拒絕 java的人,大部分只是在游戲圈子里面打轉的人,偶爾開發下 web,缺乏其他行業和領域的經驗。看看除游戲外,當今多少世界級的開源服務器是用 java開發的?游戲就真有那么特殊么?我看不是,國外大把java開發的游戲服務端,各位如果知道游戲服務端領域有啥 java技術棧解決不了的事情,麻煩告訴我一聲。再看看java上下游的 scala, javascript, groovy這些東西。所以建議各位,有空有條件的情況下,認真考慮下 java技術棧,世界很大,不是只有游戲;即便游戲,現在的開發方法真的對嗎?
現代選擇有很多:java + javascript, c+python, c+lua, scala, go, erlang。我們面向性能的服務器用 java,面向邏輯服務器 python,面向高並發的會選擇 scala,次一級高並發或者性能測試程序(機器人)會選擇 gevent。那是不是我們就不用C++呢?我們用 C來做網絡,不用C++,但是C的比例在所有代碼中占比有限。
這是否意味我們可以放棄C/C++了?也不是:C語言是一把鋒利的匕首,而現代動態語言是一把長劍。平時匕首可以藏在身上,大部分時候用長劍披荊斬棘就夠了,但當你碰到堅硬的石頭,長劍不管用了,那么拿出匕首來果斷的切碎他。
對於一個成熟領域而言,我的建議是盡量用更高級一點的開發語言,因為游戲開發很多核心技術都有了較為妥當的解決方法。大量的服務端邏輯其實都是在等待,等待網絡,等待數據庫,這種情況下用C得不償失。但是服務端有一些地方還是躲不開C/C++,比如當服務器涉及到 3D計算的話(國內很多2D服務端,國外很多3D服務端),大量的矢量矩陣,除了用C++封裝出一套好用的數學庫外,即便直接用java寫,那也是很麻煩的。再比如現在快速動作越來越多,為了讓玩家操作更流暢,我需要基於 UDP快速可靠協議,協議開發用 java或者scala,性能上是沒辦法滿足要求的,況且協議實現后要和客戶端通信,你沒法讓所有客戶端跟着你一起用java/scala。再比如某些cpu密集的抽象度高的模塊,如 aoi或者 ai模塊。
對於一個新興領域而言,C/C++很多情況下是你別無選擇的東西。比如移動化浪潮剛起步的時候,還沒有啥 cocos或者 unity你真要開發游戲,你必須迅速的使用起 OpenGL ES和 OpenSL,然后再疊加某一腳本,以快制勝,第一批移動浪潮上發財的就是這些游戲。又或者,你可以根本躲開,先不介入,等到幾年后cocos和 unity成熟了,你在介入用lua / C#寫程序。再比如服務端你如果離開熟悉的游戲和web,去開發一個陌生的領域,如流媒體服務,你會發現這怎么和10年前的游戲一樣呀,什么高級工具都不給我用用,這時你可以再等個四五年應該高級工具會出現,異或你想領先別人時,你就果斷的拿出 C/C++來解決之,這就是C獨有的開拓新領域能力。
大部分答案都是非黑即白,非此即彼。不要只會C不會動態語言,避免成為一個傻逼;也不要只會動態語言不會C,避免離開熟悉的溫室就活不下去。對於一個新手而言,如果什么都沒學過,我的建議是先用快速開發的東西,把項目弄起來再說,有精力有機會的情況下,也不能完全放棄一些基礎的東西,讓自己殘缺了。
PS:在相同架構下,就純粹性能而言,各種語言性能差距到底是多少呢?如果只開發回合制這些慢節奏游戲,或者HTTP接口,大部分情況都在等待數據庫等待用戶消息的話,差別確實不大,的確可能5%都不到。如果cpu密集了,那么可以參考下面的圖表,總體來說是10-50倍的性能差別:

有人問,說了半天,這個也不行,那個也不完美,而我時間有限,有沒有一個更經濟實惠的方法呀?如何才一次性達到彼岸呀?時間有限項目吃緊有沒有更好的選擇?我說有啊!那就是 java。
國內游戲開發繞來繞去還是腳本+C+erlang+go,難道大家就不會其他東西了么?大部分可以的情況下,除了非用C/C++,我推薦各位認真考慮下 java,這個性能上最接近C的東西,能承當大部分cpu密集型事務,卻又不會象c那樣 crash了找都找不到問題在哪里。同時面向高並發時基於原生jvm的 scala可以提供類似 erlang的簡單方式,函數式編程 & 大規模並發協程 & actor;同時 java可以很方便的同 javascript結合,js的速度應該是動態語言里面最快的吧。再者 java還有 groovy,可以提供 python/ruby的泛型編程,用超高的開發效率和 python/ruby媲美,同時還能和 scala 結合實現高並發。最重要的是寫 java好招聘,到處都是寫 java的工程師,大部分語言級的培訓都可以省略了。
國內游戲開發者很多拒絕學習 java,因為很多開發者自己是碰都沒碰過。現在拒絕 java的人,大部分只是在游戲圈子里面打轉的人,偶爾開發下 web,缺乏其他行業和領域的經驗。看看除游戲外,當今多少世界級的開源服務器是用 java開發的?游戲就真有那么特殊么?我看不是,國外大把java開發的游戲服務端,各位如果知道游戲服務端領域有啥 java技術棧解決不了的事情,麻煩告訴我一聲。再看看java上下游的 scala, javascript, groovy這些東西。所以建議各位,有空有條件的情況下,認真考慮下 java技術棧,世界很大,不是只有游戲;即便游戲,現在的開發方法真的對嗎?