如何選擇適合自己項目的編程語言
與操作系統一樣,在辦公室軟件套裝和計算機中也具有各種計算機語言。存在這種多樣性的原因與其它地方的多樣性一樣—-因為沒有單一的解決方法能 夠解決所有的問題。有些語言在原始速度上更出色。有些語言能夠幫助你更輕松地編寫防止崩潰的代碼。有些語言非常擅于剖析文本并有效作用于服務器上。有些語 言具有強大的公司投資。也有些語言之所以存在是因為它們與大量不適合重新編寫的現有代碼相兼容。
你的語言選擇將影響著你的項目,并且你不可能在項目中途突然改變語言,所以這是你必須重視的一個選擇。這也不是一個你能夠根據自己的個人喜好或 朋友的提議而做出的選擇。你關于項目的計算機語言的選擇應該是經過仔細研究且務實的。最重要的是你的結果的質量而不是語言是否配得上你個人的編程技巧。
本文將分析一些游戲程序員經常使用的語言。這并不是一個完整或深入的列表。本文傾向于呈現給你最受歡迎的游戲開發語言,同時還會提供一些簡短的介紹以及它們在哪種情境下是有利于項目或不利于項目。
如果你還是一位新手,那么這一列表可能會包含一些你并不熟悉的術語,并且也沒有足夠的空間對這些術語進行詳細解釋。所以我建議你可以在維基百科上進行相關搜索。
C
C 程序設計語言可以說是父輩一般的存在,或者對于本文提到的其它語言具有非常重要的影響。盡管C是源自一些已經被淘汰的其它語言,但是現在它也成為了計算機 “根植”語言之一。雖然今天還存在一些比C先誕生的語言存在(如 COBOL,FORTRAN,Lisp,Smalltalk)并且與C沒有多大關系,但是 20 世紀 80 年代以來所誕生的每一種語言至少在某種程度上具有與C語言類似的語法。
C 是經典的“支柱語言”,也就是使用開放和關閉的花括號將一些表述組合在一起的有結構的 goto-less 語言。這是之后許多語言中所呈現的方式(包括C++, Java, C#, ActionScript, PHP)。C語言的無盡結構的一個優勢便是一旦你理解了如何基于C語言完成某事,你便能夠將其帶到其它語言中(并且幾乎沒有任何改變)。例如C和 PHP 中的 if (), while (), and for ()表述都是相同的。也就是說如果你熟悉了C語法,它將在之后帶給你非常大的幫助。
優點:C適用于編寫簡短且快速的程序。這是我們很容易與之互動的語言。該語言本身與庫子程序一樣都是標準化的,所以講程序移向其它平臺將會是一個直接的過程(如果你事先計劃好的話)。
缺點:快速編寫小程序的能力對于C來說也是不利的,因為通常情況下C并不是用于對象導向型編程,這是構建更加適合于基于分散式開發的大型程序的 方法,而大型C程序很容易變得雜亂無章。盡管許多大型項目是基于C語言 Unix,Windows,Oracle 進行編寫,但是管理一個基于C語言的大型項目要求比圍繞著更加模塊性所創造的語言更多紀律。
可移植性:盡管語言本身以及 ISO 功能調用是可移植的,但是這些調用卻受限于控制流,簡單的內存管理以及文件處理方面。現代用戶界面設計,如菜單,按鍵,對話框等等都是不可移植的,所以你需要編寫對第三方 UI 工具箱是有效的代碼或計劃再次編寫你的用戶界面。
盡管這并不是最早出現的語言,但是C程序庫卻呈現出了它的年齡。像內存管理和附帶條件等許多較有意義的程序庫功能都擁有一個簡單的語法,能夠在后續語言中進行有效調整。
盡管為了與時俱進C語言進行過多次的重新設計與調整,但是仍有些語法卻是違反直覺的。為了與現有的代碼保持兼容仍保留了一些較為奇怪的語言結構。
是否適合新手:并沒有很好。盡管C語言非常簡潔且容易掌握,但是許多C程序庫調用卻很陳舊,且很容易用于一些后續語言中。
資源:盡管 Kernighan 和 Ritchie 的《The C Programming Language》是該主題的“經典”著作,但是該書只是快速地提及該主題,甚至未能讓編程新手們好好理解。不過還有其它值得推薦的相關書籍,如《C How to Program》,《C Programming: A Modern Approach》和《C Primer Plus》。
C++
C++是C語言最早建立的“子”語言。它誕生于 20 世紀 80 年代,是作為C語言的延伸版本并支持“類”,這是將原始數據類型和算法聚集到更容易創建現實世界(或者游戲中的模擬世界)對象模型的內容中的抽象數據結 構。C++類同樣也支持“隱藏數據”概念,在這里你可以將一個對象的根本執行隱藏起來。盡管這一方法看似有點難理解,但在基于團隊環境編程時這卻非常有幫 助。這讓你們能夠在對象界面如何運行且無需考慮其內部運行方面達成一致意見。這就像是在說“我將給你一份工作,但我不關心你是如何做的,只要你能夠完成 它,并且結果是我想要的便可。”
優點:完全支持面向對象(OO)的范式,這比支持大型項目的C語言好多了。與C不同的是,它包含了一個帶有常見數據結構和算法的設計精巧的程序庫。
缺點:隨著每一次迭代,C++的算法變得更大且更復雜,現在這一預言完全變成是拜占庭風格了。該算法本身很容易被濫用,雖然 C++ 支持團隊變成,但是且巨大且深層次的算法會讓代碼變得更難讀。
可移植性:盡管是源于C語言,C++卻擁有比前者更棒的可移植性。引導大多數現代移植工具箱都是執行于 C++ 對象程序庫而不受早前的C功能程序庫。此外,C++的標準程序庫以及非常有用的 Boost 程序庫非常標準化且是跨平臺的,盡管這兩者都很復雜。
是否適合新手:盡管在 C++ 中內存管理和I/O操作都比C語言好理解,從規模來看 C++ 擁有非常高的學習曲線。他們并不需要為此學習整個語言。
資源:關于 C++ 的一本完美的新手書籍是 Steve Heller 的《C++: A Dialog》。這是一本節奏適度且容易理解的書,非常適合編程新手。
還有更加全面的方法,即 Bruce Eckel 的《Thinking in C++》系列將通過 1600 頁內容告訴你所有你需要知道的C++。
你都可以免費下載到這些書籍。或者在谷歌上進行搜索,你便能夠找到它們的官網。
C 或C++:除“DirectX 或 OpenGLad”以外,這是在準備學習語言時最常被問到的問題。除了一些較小的例外外,C++可以說是C語言的超集。這意味著所有C語言所做的都與 C++ 一樣。每一個 C++ 編譯器都將編譯C語言,而在今天我們很難找到唯獨支持C語言的編譯器。盡管這些事實讓選擇從C語言開始然后再學習剩下的語言更具邏輯性,但是盡早學習類和 OO 編程將會更有幫助。
Objective-C
Objective-C 是帶有動態執行時間的對象導向型編程語言。就其本質來看,它就是C語言的一個超集。它集成了來自C語言的基本語法規則,同時也擁有一些構造上的變化。例如它將包含一些方法調用,整體的定義規則等等。
Objective-C 是 MAC OS X 和 ioS 編程的主要語言,也是專屬于蘋果的語言。它支持各種開發技巧,功能,程序庫以及許多能夠凸顯該語言的額外功能。該語言支持處理 2D 和 3D 圖像(基于 OpenGL)的廣泛嵌入式程序庫,這能夠幫助許多小型游戲開發者通過使用強大且原生的解決方法創建自己的第一款游戲。其它程序庫也能夠幫助游戲開發,特 別是手機游戲開發。還有一個突出的功能便是引用計數垃圾收集器,與非常復雜的內存管理系統相互協作。
優點:Objective-C 是C語言的一個強大超級,能夠創造并允許強大且靈活的應用。它能夠利用C/C++代碼并輕松移植全新項目,擴展現有的能力等等。該語言能夠擁有各種有幫助 的程序庫以及 Xcode 最佳的開發環境之一。這是一直能夠基于多種方式進行使用的強大 OOP 語言。
缺點:Objective-C 是專屬于蘋果的語言,因此你需要擁有一臺蘋果計算機,運行最新的 Mac OS X 版本才能開發你的應用。另外一件需要注意的事是該語言的有些語法規則可能會讓新手感到困惑。方法調用遠未達到標準,類定義也會引起沒有C/C++經驗的新 手的困惑。此外,如果你計劃面向 iOS 開發應用的話,你便需要掌握基于較高層次的內存管理知識。
可移植性:沒有。任何基于 Objective-C 進行編寫的內容都必須屬于蘋果的產品。如果未基于其它語言重新編寫,你便不能移植 Objective-C 項目到任何平臺上。也就是說 Objective-C 只適用于 Mac OS X 和 iOS 開發。
是否適合新手:Objective-C 并不是最適合新手的語言,盡管它也不是最復雜的。如果學習 C# 或 Java 的話你會更輕松,然而相對于C++,精通 Objective-C 會更簡單。新手通常需要閱讀許多關于內存管理等理念,如果你剛剛起步,這有可能是一個較為困難的過程,但是將帶給你長期的幫助。
資源,除了官方的蘋果向導,在 onlineprogrammingbooks.com 上還有許多有幫助的免費電子書—-http://www.onlineprogrammingbooks.com/objective-c/
參考:
Objective-C 基礎
- http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html
- http://www.otierney.net/objective-c.html
- http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-1/
Objective-C 內存管理
- https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
- http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html
基于 Objective-C 的游戲開發:
- http://people.oregonstate.edu/~doneb/downloads/iPhone%20Game%20Development%20Developing%202D%20%26%203D%20games%20in%20Objective-C~tqw~_darksiderg.pdf
- http://www.idevgames.com/articles/for-beginners/2
Objective-C 與 Java 的比較:
Objective-C 與 C++ 的比較:
一般的 iOS 開發與 Android 開發的比較:
Java
從實用性來講,Java 可以說是第一種“網頁”語言。盡管像 Perl 等語言會突然發現它們處理字符串的能力在恢復價值和發送 HTML 到網頁瀏覽器上是天生的,但是 Java 是最早發現自己是根植于瀏覽器中,最初是在一個有趣但卻非常古怪的 HotJava 瀏覽器(基于 Java 本身進行編寫),而之后又以現有瀏覽器的擴展形式呈現出來。
盡管從表面上看其結構與C和 C++ 類似,但是 Java 的后端表現卻與這兩種語言不同。比起編譯 Java 源代碼到原生及其代碼中,Java 編譯器將編譯由 Virtual Machine 或 VM 所運行的“字節碼”。Java 字節碼是一種匯編語言,但卻不是與特定處理器有關系的匯編語言。Java VM 是字節碼的運行時解釋器,將為你的機器目標處理器解釋字節碼。這一方法的優點在于,如果目標及其擁有可兼容的 Java VM 或 Java 所承諾的“編寫一次就能夠在任何地方運行”,你便可以在不同機器間移動 Java 字節碼,并且可以無需做出任何改變而運行。這一方法的缺點在于 Java 字節碼并不是原生機器代碼,盡管像“及時”編譯器能夠完善 VM 性能,但實際上你是在運行時間做一些解釋,這將引起較小但卻可衡量的性能打擊。
還有其它缺點便是,Java 的現實性并不符合語言的早期承諾。盡管在網頁中執行游戲的理念幾乎能夠馬上讓所有人動心,但現實是 Java VM 并不能與所有內容兼容,使用特定 VM 而編寫的 Java 應用或支程序可能不能運行于帶有其它 VM 版本的機器上。“編寫一次就能夠在任何地方運行”被改為“編寫一次便能夠移植到任何地方”,也就是說一旦你完成你的 Java 代碼的編寫,它便能夠有效地運行于一個平臺上,然后你所面臨的重要任務便是確保你的應用能夠有效運行于所有系統上。
Java 的第三個缺點便是源自其 GUI。盡管首次“傳遞”促使 Java GUI 使用原生的 OS 控制(按鍵,滾動條等等),較小且較快,但卻沒有深度。下一次傳遞 Swing 雖然看起來好多了,但是表現仍然很早,并且完全不同于最初的控制。最糟糕的是 Sun(Java 之父),太慢了,難以添加現有的 OS 功能,就像關于 ClearType 字體渲染的支持。因此,Java 應用總是著眼于一些與現代化不著邊的版本。
但是在服務器編程方面,Java 便揚眉吐氣了。VM 的一大優勢便是,它并非真正的處理器,只是一個模擬,所以銷毀 VM 并不是多大的問題。如果你對于 Java VM 感到困惑,這并不會真正影響基本的操作系統,你大可以選擇關閉并重新開始,并且不需要重啟整個機器。再加上 Java 的內存管理模式是源自 C++ 和C語言,所以像分配內存(無需將其帶回之前的系統)這樣的問題便不再是多大的問題了。像這樣的系統非常適合服務器環境。服務器可以突然出現并在必要的時 候消滅 VM 且不會對潛在 OS 造成任何影響。同樣地,GUI 問題也并不適用,如果你的服務器軟件看起來并不壯觀,它便一點都不重要,除非你想要給服務器管理員留下深刻印象。今天你將會發現許多商業大型多人游戲在服 務器端使用了 Java。Three Rings 的多人游戲便是個很好的例子,他們不僅在客戶端,同時也在服務器端使用了 Java 語言。
Java 發揮重要作用的另一個領域便是手機市場。J2ME(Java 2,Micro Edition)是帶有刪節類程序庫(游戲包注:專門為在手機和其它較小的設備上運行而設計的)的 Java VM 的微小版本。實際上,如果你包含了手機目標群體,Java 可以說是現在最受歡迎的平臺之一。
優點:Java 的 Virtual Machine 加上其內存管理和不再需要的內存的自動收集讓你能夠創造非常誘惑力且足以避免被摧毀的軟件。它同樣也帶有強大的擴展文件傳統。
缺點:Java 的“編寫一次便能夠在任何地方運行”的承諾未能兌現。Java 類程序庫已經經過多次重新編寫且未刪除早前的調用,所以即使程序庫與早前的代碼是反向兼容,似乎還有三種方法能夠做到一切,除了因為“過時”而被拒絕。
可移植性:非常不錯,但卻不像想象中那么棒。基于 Java 創造一款可移植且能夠使用潛在的 OS 最新功能的應用與在 C++ 上這么做一樣困難。
是否適合新手:非常適合。盡管在不遭遇棄用對象的前提識別執行某項任務的“正確”方式對于那些還在摸索語言的新手來說有點困難,但是語言本身的核心是很容易理解的。同樣地,Java 也是許多大學課程的標準語言。
資源:Oracle Inc. 擁有許多對 Java 程序員有幫助的優秀資源。
.NET Languages(特別是 C# 何 Visual Basic)
.NET 是微軟對于 Java VM 的基本答案。實際上,.NET 是以整體技術命名的。真正的 VM 名字是 CLR(公共語言運行時),之前所談論的關于 Java VM 的一切內容都適用于 CLR,但也有一個例外:CLR 從一開始便不是用來“匹配”單一語言,就是 Java 那樣。因為這樣,有許多語言使用了 CLR 去執行后端處理。不管是像 COBOL 和 FORTRAN 這樣的早前語言還是像 Python 這樣的現代語言都能夠瞄準 CLR。需要提醒你們的是,有些 CLR 項目是小型的單人項目,所以如果你在 CLR 版本中找到你最喜歡的語言也不要太過興奮,因為在這里有些編譯器還不夠成熟。
微軟所開發的 C# 和 Visual Basic 都是最受歡迎的 CLR 語言。C#是源自 Java 的語言,它帶有 90% 的 Java 語法,盡管從表面看它更像是源自C或C++。C#擁有一些很棒的語言擴展,即基于 Java 慢慢添加的內容,并重新編寫了類程序庫。
簡稱 VB.NET 的 Visual Basic 是 CLR 執行以及對于微軟已建立且受歡迎的 Visual Basic 環境的替換。盡管它仍被稱為“Basic”,但卻不再是全部大寫,它與早前的 BASIC 解釋器(貫穿于 20 世紀 80 年代所出售的所有計算機的 ROM 中)只帶有少量的相似處。現在,它的語法與本列表中的其它語言非常相似,盡管它仍然未使用括號去整合某些內容。它同樣也使用了更具對象導向型“點記法”去 調用功能而不受語言的前 CLR 版本的更大的功能程序庫。
優點:盡管 Java 并未投入太多努力面向 Java VM 編譯語言,但是 CLR 從一開始便是為了支持這一點。因此存在許多基于 CLR 的語言,并且它們很容易進行互通。
.NET 技術獲得微軟的 Visual Studio 環境的大力支持,而這也是一個非常成熟且具有豐富的功能的開發環境。
C#對于微軟的 XNA 技術來說應該算是首要的編程語言,這是創造在 Windows 和 XBox 360 游戲主機間可移植游戲的一種方法。
缺點:與 Java 不同的是,CLR 應用不能像網頁中小程序那樣運行。盡管“Silverlight”技術允許這點,但是對于游戲來說這卻太遲了,并且不能像 Java 和 Flash 那樣根植于瀏覽器中。
基于 CLR 的應用比想象中更難移植。
可移植性:盡管存在第三方將 CLR 移植到到除 Windows 外的其它操作系統,但是基于這一方向的努力卻遠小于面向 Windows 的努力。所以盡管你可能面向 Windows 創造一個非常有活力的 .NET 應用,但是你在 Mac 和 Linux 上的執行卻不會多么順暢。
是否適合新手:都適合。這兩種語言都是很直接且容易理解的。此外,它們與 Visual Studio 環境的緊密關系也讓設置變得更加簡單。
資源:Microsoft.com
Flash 和 ActionScript
Flash 在這一列表中算是一個不尋常分子,因為它并不是源自語言本身,而是伴隨著一個動畫工具誕生。在 20 世紀 90 年代,一些開發者對在網頁上呈現動畫圖像所要求的規格以及它們所呈現的方法感到震驚,所以他們便創造了一個名為“FutureSplash”的瀏覽器插件 以及一個能夠創造緊湊的向量式動畫的繪制和動畫工具。互動網頁業務巨頭 Macromedia(已經擁有能夠通過自己的 Director 動畫工具播放內容的 Shockwave 插件)購買了 FutureSplash,并將其重命名為“Flash”。
在經歷了幾個版本后,Macromedia 添加了一個 JavaScript 子集,將“ActionScript”整合到插件中,于是 Flash 便成為了一個完整的編程環境,盡管它經歷了幾個語言版本,并且開發工具也發展成對除簡單網頁游戲之外的內容有幫助的優秀環境。今天,屬于 Adobe 的 Flash 是基于 ActionScript 3,這是完全執行了 ECMAScript 標準并且與本列表的其它語言一樣具有重要作用。
幾年前,Adobe 公開了一個名為“Flex”的工具,即嘗試著將 Flash 發展成更加適合創造基于瀏覽器的用戶界面和 RIA 內容,而不再只是針對于動畫和游戲。盡管并不是 Flash 的替代品,但是 Flex 比前者更適合創造用戶界面,因為它是帶有豐富 UI 支持而不是只伴隨著固定變成語言的動畫工具的 XML 編程語言。
基于最近的 Flex 版本,Adobe 公開了一個名為 AIR 的產品,它能夠從瀏覽器中分離 Flash 內容。使用 AIR 和一些新創造的對象(游戲邦注:致力于幫助 Flash 內容使用更多機器資源而不只是瀏覽器插件),你將能夠從 Flash 中創造優秀的可執行內容,并運行于各種平臺上。
優點:Flash 完整的繪制和編程工具讓編寫基于網頁的游戲變得更加簡單。盡管沒有 Visual Studio 血統,Flash 環境仍具有非常豐富的功能。
缺點:盡管對于一個人來說是個很棒的環境,但是 Flash 卻不能有效支持團隊編程。
盡管 Flex 編譯器是免費的,但是 FlexBuilder Flex 內容創造工具卻不是。
與這一列表中的其它語言不同的是,ActionScript 是針對于客戶端的技術。盡管有些服務器端的 ActionScript 解釋器可能會阻礙你學習單獨的服務器語言,但事實上卻不存在這樣的情況。
可移植性:Flash 執行時間播放器可以允許于 Windows,Mac,Linux 多種手機以及一些游戲主機上。但并非所有設備都支持同樣本本的 Flash,所以你需要學習每周版本的能力,并在開始前決定好目標平臺。
是否適合新手:非常適合,特別是結合其繪制和動畫工具。盡管容易在 Flash 環境中創造內容,但卻不適用于其它語言。例如,C++使用的一種技巧或創造工具可能在 Java 中擁有等價內容,反之亦然。但是 Flash 的開發環境卻與其它語言不同。
資源:就像微軟是能夠滿足你的所有 .NET 需求的萬能商店一樣,Adobe 對于 Flash 也是這樣的存在。
Python
與之前提到的語言不同的是,Python 并不是始于一家大型公司或大學項目。它更接近于大學學生的基層工作,并且在之后變成產業中喜歡語言結構以及缺少就功能的人的選擇。該語言本身非常緊湊且很 容易使用。我們同樣也能夠輕松地將 Python 語言解釋器整合到現有的項目中,這也是為何你會發現 Python 作為許多游戲的內涵腳本語言的原因。
呈現了許多 Java 的服務器友好型屬性的 Python 也是非常棒的服務器語言。實際上,Python 編譯器能夠棉鞋 Java VM 和微軟的 CLR 編譯 Python 代碼。你會發現許多服務器(游戲邦注:如 油Tube,谷歌和雅虎)都使用了 Python 進行后端處理。
基于用戶支持的 PyGame 程序庫,Python 在游戲社區越來越受歡迎。PyGame 是一個能夠將已建立的 SDL 跨平臺圖像程序庫抽象化為一些容易使用的 Python 內容的對象程序庫。一些讓人印象深刻的游戲都是使用 Python 進行編寫。
優點:是一種免費的開放源。專注于用戶社區。能夠完全整合到谷歌的 AppEngine—-這是谷歌的“付費”處理服務器。
缺點:事實上,幾乎所有處理都不是經過一家大型公司而是通過其用戶社區,所以這可能是為了讓公司簽訂一個 Python 項目的強行推銷方式,盡管一些巨頭已經在 Python 做出了巨大投資,所以現在的 Python 不再像過去那樣作為一種“業余語言”了。
可移植性:非常好。大多數適合 Python 的第三方程序庫都是圍繞著像 SDL 和 OpenGL 等可移植技術進行創造,所以我們能夠基于 Python 輕松編寫一些可運行于任何平臺的內容。
是否適合新手:Python 語言擁有能夠輕松上手的語法并且很容易學醫。此外,還存在一些很棒的社區編寫教程。
資源:Python.org 擁有所有與 Python 相關的內容。這同樣也是許多活躍社區論壇的集中營,在此你能夠獲得各種問題的答案。
匯編語言
關于匯編語言你必須了解兩件事。
語言的名字是“匯編”。將匯編語言轉換成低級別的機器編碼的工具名字是“匯編程序”。這是一個很常見的錯誤,甚至連有經驗的程序員也會犯這樣的錯誤,即將語言稱為“匯編程序”。所以請先叫對它們彼此的名字。
默認情況下,匯編語言是本文中最小且最快的語言。因為它并非高級語言,但卻是你的 CPU 指令系統助記碼代表,任何基于高級語言所編寫的內容都能夠快速用匯編語言呈現出來。
鑒于以上事實,你可能會認為你的研究就此結束了。畢竟,如果一種語言是最小且最快的,又有什么不使用它的理由呢?實際上,為什么其他人會在你能夠基于匯編語言編寫代碼并獲得最佳結果的時候還費心去研究C或 C++ 呢?
那是因為“最佳代碼”這一詞并不是指代你的程序的原始速度和規模。存在可讀性,就像你可能需要遞交部分代碼給同事讓他能夠基于這些內容完成自己 的任務。存在可移植性,即你可能需要將代碼移植到其它操作系統或硬件體系結構中。存在可維護性,即需要能在項目快結束時輕松解決問題。存在抽象性,即你可 以基于向下移動角色而不是操控內存中的數字去編寫代碼。
基于所有的這些元素,匯編語言絕對是最后一位。匯編語言很難讀也難以維護。除非經過仔細評述,否則很少有人能夠傳承其代碼。修改漏洞以及延伸現有的代碼很復雜。你必須不斷專注于可移植性,以防你最終編寫出不能運行于來自同一制造商的不同處理器模型。
實際上,匯編語言從未被用于完成游戲。匯編語言通常是作為程序的一部分將執行計算并會經過多次調用。有時候修改功能中的一些機器指令將幫助你創 造一些額外且有價值的內容。但卻不是在項目已開始便能夠執行的過程。這是在早前測試所執行的,即在決定變成瓶頸到底出現在哪里時。
匯編語言并非最熱門的選擇,如果你閱讀了這篇文章并嘗試著明確該選擇怎樣的語言,你便可能會轉向其它語言。
優點:如果你知道自己在做什么的話這可能會是最快且最有影響的方法。
缺點:如果你正在閱讀這一內容,你可能就不知道自己在做什么。所以請準備好花較長時間去學習無數能夠推動處理器棒的技巧。
可移植性:糟糕透頂。除非你正在面向基本處理器編寫代碼,否則你的程序可能不能運行于其它“可兼容的”處理器上。例如,AMD 處理器上一些特殊的指令在 Intel 上便不可行,反之亦然。
是否適合新手:一點都不。
資源:如果你想要面向 Intel 處理器編寫代碼的話,面向基于 Intel 的計算機的匯編語言便是個很好的推薦。但如果不是的話,你應該著眼于目標 CPU 的制造商。
服務器語言
盡管上述提到的許多語言都能夠有效作用于服務器上,但是它們所圍繞的許多技術都較為陳舊,而現在也存在更容易使用的解決方法。關于為網頁編寫一 個定制后端的最初標準是所謂的 CGI,這是在服務器端運行一個定制的可執行文件的一個定制后端,將在網頁上傳輸數據,并收集文本輸出內容然后將其回傳給用戶。盡管這在服務器端很容易執 行,但這卻并未按照今天網頁的使用方式去創建互動體驗模型,最好的情況便是面向互動網頁應用的 CGI 解決方法會很笨拙。
PHP
PHP 是最早的網頁“嵌入式”腳本語言之一,并且它將給予多種方式改變所編寫的網頁。盡管 PHP 可以作為一種腳本語言,基于網頁形式獲得輸入內容,處理它并返回輸出內容,但是其真正優勢是在于作為超文本預處理器的作用。一旦被設置為服務器的預處理 器,PHP 便能夠處理嵌入頁面中的代碼。所以比起編寫一個獨立代碼,在一個頁面上打出當前日期,你可以選擇直接將 PHP 代碼嵌入印有日期的網頁中,如此代碼將被最終文本所取代。PHP 同樣也能夠添加本機命令程序庫與強大的 MySQL 數據庫進行交流,從而是保存和檢索持久數據變得更簡單。
推動 PHP 瞬間倍受歡迎的另一點是價格。它是免費的,因此幫它基金了名為 LAMP(Linux,Apache,MySQL 和 PHP)的服務器配置中。這 4 個技術的結合為剛起步或低預算的網頁設計師提供了免費切容易使用,的強大網頁設置。作為獎勵,它還能夠基于低成本的硬件而運行。這對于網頁開發者并沒有影 響。在今天存在許多待執行的免費貨低價 PHP 腳本,不管是簡單的用戶數據庫還是完整的網站設置。
ASP.NET
不甘示弱的微軟很快便基于微軟的技術,也就是 Windows,Internet Information Server(微軟的網頁服務器),CLR 和 SQL Server,組合了自己的 PHP 式的配置。盡管并不是免費的也不屬于 PHP 聯盟,ASP.NET 卻擁有所有技術支持費用能夠買到的優勢,且能夠支持除 PHP 外的語言。如果你非常熟悉客戶端的 Visual Basic,你便能夠基于 ASP.NET 在服務器端使用它。
但如果你的預算非常有限,LAMP 設置可能會是更好的選擇。
Ruby on Rails (通常簡稱為 Rails)本身并不是一種編程語言,但卻是伴隨著 Ruby 編程語言的一個類程序庫架構。盡管 Ruby 本身是一種不具有重大改革性的對象導向型腳本語言,同時集成了 Python 和 Perl,但是其 Rails 程序庫卻創造了系統改革。Rails 程序庫完全整合了 MVC(Model View Controller)范式并致力于防止技術的重復。這讓你能夠基于較小的代碼創造一個相對豐富的服務器系統。Rails 使用者將能夠自豪地炫耀基于少量代碼所編寫的網頁論壇和社交網站。
與 PHP 一樣,Ruby on Rails 也是免費的。
值得一提的其它語言
上面全部是關于在游戲開發世界擁有自己一席之地的語言,不管是在客戶端還是服務器端。也就是說大規模或受歡迎的游戲都是使用這些語言進行編寫。但是仍有一些并非游戲一流語言,但卻呈現了許多希望的有趣的技術存在。我們將會在未來的一些重要項目中看到這些語言的出現。
JavaScript
我們已經在關于 Flash 和 ActionScript 的部分中簡要提及了 JavaScript。JavaScript 擁有與 ActionScript 同樣的根源,這兩種語言可以有效地組合在一起。JavaScript 最早獲得關注是因為作為編寫網頁腳本的語言,而今天它卻是作為推動,延伸并說服網絡瀏覽器按照你想要的方式去呈現網頁內容的語言。如果你曾經因為為了適應 頁面內容而調整自身規格的網頁而煩惱,你便可以選擇 JavaScript。
但 JavaScript 的作用不只是解決讓人煩惱的網頁問題,它也成為了編寫臺式機上所有有趣但卻無用的小工具的語言。此外,該語言非常完善,足以用于編寫一款完整的游戲,如果是基于小工具框架的話,便能夠在瀏覽器或單機中運行。
還存在兩個主要問題阻礙著 JavaScript 成為網頁游戲中更受歡迎的語言。第一個問題便是,與 Flash 插件不同的是,JavaScript 的解釋器是依賴于瀏覽器制造者。盡管語言是基于非常完整的 ECMA 標準,但是瀏覽器所使用的 JavaScript 執行在語言功能和性能中卻是不同的。因此我們很難編寫一個能夠運行于所有瀏覽器上的強大的 JavaScript 應用。
第二個問題便是關于你的知識產權的保護。JavaScript 并不是作為源代碼進行編譯,然后再由瀏覽器本身進行解釋。盡管存在一些有效的工具能夠向你的用戶隱藏代碼,但是你的游戲的源代碼卻從未能逃離你的瀏覽器的 “查看源代碼”指令。如果你并不想你的游戲被模仿/改變/偷走,你就應該仔細著眼于一些有效的安全性解決方法。
D
D 是C,C++和 Java 的“非官方”子孫。這是 Walter Bright(注:作為 PC 上C和 C++ 編譯程序構造的先驅之一)腦力勞動的產物。隨著不斷發展的類程序庫以及對于反向兼容性的需求所帶來的各種壓力,Bright 決定從頭開始創造某些內容,汲取C,C++和 Java 的最佳功能,同時舍棄任何不具有存在下去的正當理由的內容。結果便創造了一種比其前輩更緊湊且更容易學習的語言,且無需犧牲任何重要的功能或運行速度。D 是當你將語言設計帶離整體領域的產物。
盡管D以簡潔的名義舍棄了反向兼容性,但是它卻擁有與C代碼交流的有效方法,所以如果你擁有第三方程序庫或一些你不愿意重新編寫的C源代碼,你便可以輕松地與之進行溝通。
也就是說如果D能夠獲得更多支持,它便可能成為世界上最棒的語言。它只是還未擁有巨大的代碼程序庫,豐富的工具,以及其它語言的用戶支持基礎罷了。希望關于該語言的支持能夠不斷發展,并且它也能夠獲得更多關注,即使這還需要花費一些時間。
結論
一開始我便清楚在關于到底該使用怎樣的語言,本文是不可能達到一個讓人滿意的結論。實際上,并不存在能夠解決所有問題的單一解決方法。希望這一列表至少能夠幫助你預留出 2 至 3 個不錯的候選對象。而剩下的研究便取決于你自己。
幸虧上述所提到的幾乎每一個解決方法都擁有免費的執行過程,所以你可以嘗試這些語言并選擇最適合你自己項目的對象。
(本文為游戲邦/gamerboom.com 編譯,拒絕任何不保留版權的轉功,如需轉載請聯系:游戲邦)
<span id="shareA4" class="fl">
</span>
</div>