Sunday September 04, 2005 什麼? 拿Java來開發遊戲!!
如果有一天,某個軟體開發人員對遊戲軟體設計產生了興趣,想找個業界的朋友詢問遊戲軟體的開發經驗,第一個問題一定是:『我該選擇哪一種程式語言呢?』,通常得到的答案只有三個:
1. C
2. C++
3. C 或 C++
這是非常合理的答案。開發人員不想接觸太低階的組合語言,可是又希望搾乾硬體的每一分資源,C或C++是最能滿足這個條件的語言。Java語言出現在1995年左右,當時的硬體條件,加上早期Java本身的成熟度的不足,導致『Java == 龜速』這個恆等式烙印在很多開發人員的心裡。所以自然無法成為遊戲開發的主流語言。
Java可以拿來開發遊戲嗎?
筆者常常開玩笑說:『Java是帶業出世的!』,所謂的『業』指的就是『業障』,也就是Java需要JVM才能夠執行,與生具來就很難在正常的情況下,擁有比C或C++還要出色的效能。這幾年來,JIT Compiler技術的改良、HotSpot技術的精進,還有許多探討如何撰寫更有效率Java的書籍充斥於書店,加上硬體的進步,其實Java早就具備開發遊戲的實力了,只是需要更多成功範例來說服開發人員。關於成功範例,可以在SUN官方網站 http://java.com/en/games/ 看到各種以Java開發遊戲的精采範例。如果您是遊戲開發人員,那麼SUN官方針對開發人員所成立的技術論壇http://community.java.net/games/,也是一個必去的好地方。
如果讀者仍然對Java是否能夠製作遊戲心存疑惑,筆者必須說:『只要有心,人人都可以用Java製作出好遊戲』。就如同大多數人認知的Script語言,也是一種速度很慢的語言,很少人拿來製作遊戲,如果您看過使用JavaScript所設計的的星海爭霸(http://elf.jsgame.net/sc/),多少可以體會,語言的原罪並非無法克服。
講解Java開發遊戲的好書
主流的C、C++行之有年,許多工具、函式庫、關於遊戲設計的書等,都是以C、C++為主,像是著名的Game Programming
Gems 系列(目前原文書出到第五集,中文翻譯書名《遊戲程式設計精華》,目前出到第二集)。Java遊戲設計的書,在原文書方面雖然比不上C、C++來的多,但是也夠令人耳花撩亂,品質差異甚大。反倒是中文翻譯書,通常挑選品質較佳的原文書進行翻譯,在台灣也大多由品質受到肯定的出版社進行翻譯,這算是身處台灣的幸福。筆者挑出幾本原文與翻譯品質一樣好的幾本書,與讀者分享。
英文原文翻譯書:
從做中學:手機遊戲程式設計 (Beginning Mobile Phone Game Programming) /上奇
大師談 Java 遊戲設計 (Developing Games in Java) /上奇
日文原文翻譯書:
Java Game Programming 建立遊戲的演算法與框架 (Java Game Programming Algorithm and Framework) / 博碩
還有更全面性的好書嗎?
目前市面上的遊戲,不管是PC遊戲,或是遊樂器遊戲,除了講究2D、3D、聲光效果、更強調善用網路,好比目前最風行的線上遊戲(On-Line Game),就充分運用了網路,達到多人共樂的效果。然而,恐怕得買上5-6本書,才能夠學到開發這些現代遊戲所需要的技術。O’Reilly所出版的Killer Game Programming in Java就是這樣一本書。本書接近1000頁,共有四大主題: Java 2D、Java聲音處理、Java 3D、Java網路程式設計,並在附錄介紹如何利用install4j或Java Web Start,讓使用者方便地安裝所撰寫好的遊戲軟體。除了人工智慧(AI)之外,這本書幾乎涵蓋了所有遊戲開發所需要的知識,而這本書的不足,可以用O’Reilly的另外一本好書AI for Game Developers (O’Reilly台灣分公司有翻譯計畫,中文版名稱為《遊戲人工智慧》) 彌補之。
Killer Game Programming in Java的作者,在第一章就列出了所有開發人員對於Java是否可以開發遊戲軟體的疑惑,包括『使用者較難安裝Java程式』、『Java速度太慢』、『Java太高階了,很難發揮硬體效能』、『有人真的拿Java開發應用程式嗎?』等議題,一一釋疑,並列出了許多相反的觀點,以及可以實證的網路資源。接著,作者就從遊戲的基本程式結構開始,介紹Java影像處理、2D圖形處理、聲音處理。到此,讀者對遊戲開發會有個基本的認識,也可以寫出一個簡單、並具有聲光效果的Java遊戲。接著作者採用標準的Java 3D API,講解3D圖形處理,這一個部分,是所有關於Java 3D的相關書籍之中,講述的最精采的一個部分,筆者認為這也是本書最有價值的部分。最後,作者介紹Java網路程式設計,並延伸前面章節所介紹的3D遊戲,改良成網路3D遊戲。作為一本介紹Java遊戲設計的書籍,筆者相信這是目前市面上就有參考價值的一本書。
筆者認為,Regular Expression是非常值得學習的東西,
從簡單的UNIX指令,程式語言,到XML Schema,SQL都有.
如果花點時間研究Regular Expression,會發現這是
投資報酬率很高的一種玩意兒
充斥於計算機領域的Regular Expressions
筆者第一次接觸到Regular Expressions(中文翻譯為『正規表示式』,接下來的內容接採用中文翻譯名稱),是在大學時期選修編譯程式(Compiler)的時候。後來開始學習Unix作業系統管理,常常用到的Unix指令,也都支援正規表示式。因為工作的關係,常常需要處理文字檔,所以開始學習Perl,這時發現正規表示式真是個好東西,當大量機械化的文字處理工作迎面而來,正規表示式大幅減少了工程師的負擔。現在最重要的兩個平台 - .net與Java,也不約而同地提供可以支援正規表示式的API(Java在JDK 1.4之後才開始支援)。對於一個IT從業人員,正規表示式異常地重要,連Oracle 10g資料庫都開始可以在SQL/PLSQL語法中支援正規表示式,可見正規表示式是一個多麼有趣,具有多用途的工具,堪稱『IT從業人員必備武器』之一。
什麼是正規表示式?
正規表示式並非一個程式語言,而是一種專門用於比對以及置換文字的機制,幾乎各種程式語言,或是涉及文字處理的軟體工具都支援正規表示式。舉例來說, 我們在想要搜尋或取代某個檔案(或字串)當中的滿足某些條件的部分,我們就可以利用正規表示式,指示計算機以較嚴格或較寬鬆的條件去處理。一般Windows使用者所使用的編輯器的『搜尋』、『取代』功能只能單純地找出某個數字文字序列的存在(例如:搜尋”port”,可能找出”important”);或者我們想一次找出Sun、SUN、sun三種大小寫狀態不同的文字,並忽略掉其他大小寫狀態的文字(sUN、suN…等),這些都是傳統的搜尋取代很難做到的,但是只要利用正規表示式的機制,這些複雜的搜尋條件都可以迎刃而解。
學習正規表示式的好書
正規表示式發展了很長的時間,卻由於缺乏一個統一標準,造成各種環境下的正規表示式語法都不盡相同,無法達到『只寫一次,到處通用』的境界。雖然正規表示式的學習曲線不長,但是即使有了正規表示式的基本觀念,卻往往因不同環境之間的語法差異,讓工程師傷透腦筋。要一次學好正規表示式,O’Reilly的出版的Mastering Regular Expressions絕對是上上之選,要應付未來各式各樣不同語法的挑戰,同一個作者所撰寫的Regular Expression Pocket Reference(O’Reilly中文翻譯本 - 正規式速查手冊)更是不可或缺的工具書。
作者在書中第一章,就展示了正規表示式解決『實際問題』的能力,並建議我們把正規表示式當作是一種簡單的語言來學習。所以把正規表示式的結構和語法做了詳細的解釋,讀者可以發現,只要需要對文字做搜尋或取代,正規表示式就可以派上用場,而且幾乎無所不能。從第二章開始,作者讓正規表示式結合Perl,做點實際的應用,像是處理Email的內文(過濾、搜尋)、或是程式設計師常常需要對使用者所輸入的參數做處理,這些過去我們直覺需要寫程式來完成的工作,其實很多都可以用正規表示式漂亮地幫我們解決掉。第三章到第五章,作者帶我們深入正規表示式的運作規則,並介紹許多實用的技巧。第六章之後,開始介紹正規表示式在各種程式語言上的運用,由於可以運用正規表示式的範圍實在太大,作者僅僅挑選了Perl、Java、以及.net進行深度解說,其實已經可以滿足目前大多數工程師的需求。
一輩子都可以受用的東西
趕羚羊的世界總部是專門發表軟性文章的,
而這裡是發表技術文章的. Orz
(2005-09-04 03:34:44.0) Permalink Comments [0]