最適合遊戲開發的語言是什麼?

對遊戲開發很感興趣,同時對現在的工作很不感興趣,通過百度論壇等等介紹,選擇了cocos2d,語言選擇學習C++,自己用業餘時間看了C++primer前面幾章,感覺不是那麼回事,畢竟學習成本太高而我又時間有限,可能大神要笑我無知,畢竟我沒有一點基礎,所以我想請問該做遊戲到底該從何入手?C++還是java,js?(問的沒啥深度,見笑了)


如果只能選擇一個語言,我會選C++。我二十多年前的答案和現在一樣,估計還可以延續多至少十年。


別局限在語言上面。就手游來講,10年前是J2ME的java語言,和看起來很高大上的C語言。現在都是C++、Object-C、C#、Java以及各種腳本語言。這些語言被使用的背後是硬體的升級(不要忘記摩爾定律)和更好的解決方案的推出。舉例來講,Unity3d流行使很多C++陣營的人一夜之間用上C#,Cocos2d-x的流行又使人離不開C++。蘋果的手機漫天都是的時候,Object-C也就成為了很多開發者必須要會的東西。

所以,選擇的時候,首要的不是語言,而是你選擇用什麼東西做遊戲。語言只是其中的一部分,不能本末倒置。


大致列舉一下
2D頁游:AS3 JS
3D頁游:AS3 C#(Unity)
IOS遊戲:Obj-C js/lua(Cocos-2d-x) js/C#(Unity) AS3
安卓遊戲:java js/lua(Cocos-2d-x) js/C#(Unity) AS3
在線小遊戲:AS3 JS
大型單機遊戲/客戶端MMORPG::C++ C#


其中AS3 JS C#(Unity)都是跨平台的。AS3(flash)目前被唱衰,JS目前又比較翔,Unity還不錯。

如果你沒有非要萬事親力親為的強迫症,用遊戲工具來做遊戲是個不錯的選擇。
遊戲製作軟體比較


對於初學者來說,語言的選擇並不重要。

遊戲開發者作為一個群體包括很多不同的分工,從遊戲性編程、界面交互到伺服器編程、架構設計和圖像渲染。對於開發者的要求有很大區別。由於有著成熟商業遊戲引擎和負責引擎研發的專業團隊,在這個行業里的很大一部分程序員都不需要掌握太複雜的編程思想和演算法就可以進行遊戲開發的工作。當然想要做優秀的程序員和優秀的作品,對技術和思想的深入掌握是不可或缺的,不過如果是剛入行就考慮這些問題,反而會讓學習的難度加大很多。

個人認為,選擇編程語言就是這樣一個「專家級」的問題,由於有大量商業引擎和庫,在應用層面上,不同語言之間的差距並不大,基本上同樣的事情,藉助合適的庫就可以通過不同語言來實現。作為初學者尤其是遊戲開發初學者,根本沒必要關心底層的東西,相比於其他軟體,遊戲開發在內容生產、細節打磨、體驗優化方面需要做的事情太多了,而這些工作都不需要底層的知識就可以去做。而當初學者經過多年實踐經驗的打磨,到了要自己做引擎做架構或者為他人編寫實現庫的時候,才需要根據具體需求的情況選擇實現最容易效率最高的語言。

===========

最後說下結論,先選擇一個引擎或開發框架,再學習這個框架支持的語言,開始的時候不用學的很深,掌握基本語法,會查api就夠了。當然宏觀的編程邏輯和面向對象之類的思想還是要掌握。拿題主的例子來說,因為先接觸了cocos2d-x,所以從C++開始學沒有什麼問題,學習材料可以選擇淺顯易懂一些的,看不懂的部分不用硬著頭皮看,以能解決問題為主導思想就好。


如果可以選擇,我希望是 Ruby。
寫過這麼多種語言,Ruby 算是寫起來舒服的。
可惜由於種種原因,它僅憑藉 Web2.0火了一下,後面有逐步被其它類似的語言追上。Python 也就罷了,JavaScript 這種反人類的語言,怎麼看都是一種勉強將就的解決方案,真不明白為什麼能火這麼長時間。

現在用 Unity3D,主語言是 C#,算是中規中矩的語言,總體來講還是優點比缺點更多,就是 Mac 下的 IDE 太蛋疼了。就算 Unity 的官方要換另一種語言,當下所有語言里也未必有更好的選擇,目前 C#還是最棒的。

一款語言的發展壯大,也是講究天時地利人和的,另外傍上一家巨頭公司也尤為重要。

  • PHP 的創始人曾在 Yahoo 呆過很長時間。後來 PHP 也被 Facebook 大為重用。
  • Python 的創始人在Google 呆過。
  • Python 本來可以藉助 Blender3D 這款開源軟體,在遊戲領域發展壯大。可惜的是 Blender3D 組委會一直不緊不慢,白白錯失了良機。
  • Java 是 Sun 的命根。
  • C#是微軟的親兒子。
  • ObjectiveC 的興起是藉助 iOS 的流行。當初據說蘋果內部也考慮過 Ruby,甚至 MacOS 也內置了 Ruby 腳本,跟 Python 平起平坐。MacRuby 在 Ruby 社區內曾一度呼聲很高,但那又如何,高層終究不會採用。所以才有了新推出的 Swift,Go 等語言。
  • Javascript 最初是網景和 Sun 共同推出的。後來成了統一 Web 的語言。我個人寫了不少 Javascript,但始終喜歡不起來,原因很簡單,語法不優美,甚至比 ObjC 更難看,可讀性差,歧義多,手寫的話 Bug 率奇高。node.js 火的時候,很多人寧可用 CoffeeScript 來寫。
  • Ruby 的創始人是日本人。估計他未來也不會去任何巨頭公司任職了。Rails 出到5.0, 但很多上線多年的代碼依然用的是2.幾的代碼。社區很活躍可惜一直沒有出現革命性的產品或者方向,反而一直充當開拓者,很多新的思想都發源於 Ruby/Rails 社區,驗證成熟後再被其它社區吸收使用。

==========
最後附帶說一下,有一款文字+策略經營RPG遊戲叫《The Dark Room》,中文名小黑屋,它的移動版是用RubyMotion開發的,是 Ruby 的跨平台移動 app 框架,具體可以看作者的開發日誌:
A Dark Room for iOS

作者採用它(Ruby 語音)來寫程序,能一直不停歇地工作12個小時,非常享受其中的編碼過程。
我也了解了一下 RubyMotion,然而在遊戲方面,它對圖形動畫方面的支持並不夠多,3D 就更別想了。只能用來做 App 或者文字類遊戲,所以一直沒有考慮採用。


我跟其他回答的人觀點完全不同。這個問題重點不是遊戲開發適合用什麼語言,而是問問題的人對遊戲開發完全不懂。在問題描述中,我覺得問問題的人根本沒有弄清楚什麼是做遊戲,對遊戲這個概念極度的模糊。

我只從問題的內容來看,可以了解到問問題的人沒有什麼程序語言的基礎。所以我給的建議是,請先去學一些程序語言的基礎,在考慮做遊戲開發。

當前做遊戲也就是走研發路線的話會分3個路線:策劃,美術和程序員。

如果想走程序員路線的話,既然你已經開始看C++primer,那就把它看下去,如果你覺得學習成本高,那麼就請放棄成為遊戲程序員的路線。因為這個基礎中的基礎,你連這個都吃不下,別去想其他的東西了。

如果走美術的路線的話,我不知道你美術能力如何,自己決定。

如果你說我程序不行,美術也超級垃圾的話,請別來做策劃。遊戲策劃肯定不是你想的那種工作,並且一個合格的遊戲策劃對自身能力要求極高,不然就是tmd在坑人。

以上。


謝 @王校長 邀請

我來唱個反調吧,對於初學者來說,是有Lua及類似的腳本語言才是最適合開發遊戲的語言,初學遊戲開發的人需要的是快速開發出遊戲原型,保持住對遊戲開發的熱情,其他東西的學習可以延後考慮。

現在包括Unity3D和Cocos2d-x都有Lua binding,同時Cocos2d-x有存在quick-x這種更加方便的引擎,對於初學者來說,沒有理由不使用Lua了,不是嗎?


居然沒人說lua,關於題主說的「遊戲開發」,我理解為遊戲邏輯開發。

C++的話,開發效率不高,一方面是靜態語言改動起來麻煩,另一方面是編譯速度造成。在我看來,C++適合用來做需求穩定的、邏輯經典的模塊,比如物理引擎,渲染引擎、網路層等等。

我第一次用lua就感受到動態語言是面向對象最好的歸宿(雖然lua沒有直接支持oop)。當我們第一次去解決某個問題的時候,常常對問題的理解總是不夠深刻的,隨著開發的進行,我們理解時刻變化,我們也會在開發中重構我們的代碼,如果用動態語言,那麼就非常合適,而且運行效率非常高,解決問題非常簡潔。因此lua是遊戲邏輯開發的首選。

綜上所述,我給lua點個贊。


最適合入門和上手的遊戲開發語言:

客戶端: JS+HTML5

伺服器端: Node.js / PHP(Swoole)

遊戲類型: 2D遊戲,如棋牌遊戲,橫版遊戲.

這裡有一個HTML5 canvas 2D遊戲的簡單的例子:

http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/
http://www.cnblogs.com/Wayou/p/how-to-make-a-simple-html5-canvas-game.html


對很多遊戲應用來說 C++ 是必知的。

Unreal 4 已經放棄了腳本支持。


c++,python
python將會成為各大媒體組件的連接工具,例如未來連接Houdini engine和你家客廳的大型電視。


C++應該還是最好用的吧


實際上我認為這個問題應該去問問靠譜的美術和策劃——當你具備了一定美術和策劃的基礎,你就會帶著需求自己弄清這個問題了~


肯定是腳本語言,可以是Lua/Python/JS。如果要用C#/Java其實也可以。最糟糕就是用C/C++。

原因是:遊戲策劃天天在改需求!如果我寫的每個函數,都要去考慮到底參數是指針,還是值,又或者這塊內存到底應該什麼時候回收,哪有時間去應付那些天天改的需求!另外,那些需要編譯的語言,往往不適合熱更新,也就是說,你不可以簡單的通過下載一個文件來更新玩家已經安裝的程序,你不可以在不停伺服器的情況下修一些BUG。最後,那些編譯型的語言沒有反射,你精心設計的名字(類名、函數名)無法自動的和各種遊戲所需的資源綁定起來,要知道,遊戲這個業務,最重要的就是代碼去控制各種「資源」,比如動畫、音樂、場景、配置等等,所以你要維護一大堆各種配置文件,用來描述代碼中的常量和外部數據的關係,既啰嗦又容易出錯。最後,就算你不喜歡面向對象,遊戲也是非常適合面向對象建模的領域,或者說,你必須要建模,那麼就應該用建模最容易的語言,否則那些互相類似、又稍有差別的業務邏輯,會讓你寫上大堆大堆的「疑似重複」的代碼。另外,Lua和Python這類腳本,因為比較簡潔,還能直接用來存儲遊戲數據,代替配置文件,而且腳本語言的表達能力比XML/INI這些格式要強大的多。所以說應該用腳本語言來寫遊戲,沒有其他的懸念。


看到了大多數前輩說c++最適合做遊戲,我這裡表示半個不贊同了。
要我說,沒有最適合做遊戲的語言,只有最適合 做你想做的遊戲 的語言。
舉個例子,我想做一個自己玩的遊戲,內容少,不要求畫質,只要求玩法,單機的,電腦端的,要求人員和時間投入最少。那麼vb這類的語言最適合不過了。
如果我想做的是仍然是一個電腦端的單機遊戲,但是是用來賣的,內容比較多,性能畫質都要求高,時間金錢和人力我這裡都足夠,那c++比較適合了。
那假如我想做的是一個android手機端的網遊,要求使用android的一些硬體(比如重力的感應),除了java還有更好的選擇嗎?

感謝 知乎 提供了如此好的一個問題提問回答平台。


//下面是2017、9、13修改

遊戲開發的技術優越性不是看語言,而是看開發平台

使用好的遊戲引擎開發,不管什麼語言,都會比不使用遊戲引擎時開發的更迅速

不過不管是語言還是平台,都不用擔心選錯

任何一種語言精通了,任何一種平台做過成功的遊戲了

再學別的語言和平台都會很快,有時候甚至不需要學,新的語言和平台拿來直接用


學習遊戲開發沒有程序的基礎沒法進行下去,最好有c…基礎,理解深度比java好的多


你的問題等價於:
最適合吃飯的餐具是筷子,勺子,叉子還是刀子?


我不是做遊戲的,但是我用C語言編過數值計算,就是微積分 ,解微分方程,遺傳演算法,數值模擬之類的,現在在看C++。

——————我的體會是,由於有指針 ,C和C++很靈活,你可以任性的玩,缺點是你需要很多年的訓練,就像練習武功一樣,才能掌握和靈活使用C和C++。

——————所以,你應該利用閑暇時間,不放棄C和C++,作為一個十年二十年的計劃,然後抓緊學習python這類腳本語言,在短時間內開始幹活。一個是為了長遠,一個是為了眼前。


unity3d吧,unity3d開發現在比較熱門,而且發展前景大


很簡單嘛, 哪個語言的ide最強大,我就用那個語言。。。
如果將「快速看到你想要」作為選擇標準(不幸的是幾乎所有非程序出生的遊戲創作者都是這麼選的),那麼你就等著被開發中遇到的各種bug正面肛死吧


推薦閱讀:

為什麼任天堂甚至都不願意嘗試為 iOS 開發遊戲?
為什麼魔獸世界正在衰落?
大神看菜鳥玩遊戲是種什麼體驗?
現在的一些遊戲電影中,為什麼納粹會和殭屍聯繫在一起呢?
EA是不是業界毒瘤?

TAG:遊戲 | 編程語言 | 遊戲開發 | Unity(遊戲引擎) | Cocos2d-x |