這些年由於Java技術的不斷發展,Java程序的運行速度有了顯著提升,同時硬件技術也在不斷進步,從而使得Java處理比較復雜的3D圖形成為可能。Lwjgl,Jogl,Java3D等技術的出現,使Java語言可以方便的利用現在的顯卡日益強大的硬件加速能力。實際上目前已經有許多基於Java的2D和3D游戲,其中不乏大型多人在線游戲。上面這些只是Java游戲的小部分。然而,即使還有其它很多基於Java的游戲,相對於整個游戲產業來說,Java游戲社區仍然非常小,以至於其力量在手機游戲之外的領域幾乎可以被忽略不計。但是實際上Java作為一種游戲編程語言和平台,這些年還是取得了長足的發展,在后applet時代走着復興之路。
當然,Java可以做游戲,並不意味着Java就適合做游戲,那么:
Java對於一個游戲的意義
1.Java是一門經過充分發展,已經十分成熟的語言
Java語言稱霸企業級應用這么多年,事實證明了它非常適合於開發大型軟件。當Java的運行效率不再是問題的時候,Java語言嚴謹、高抽象、可讀性強的優勢就體現出來了。這對於規模越來越龐大的游戲軟件來說,有着不小的誘惑。
2.Java作為平台,極大的方便了游戲腳本的使用
對於游戲開發來說,由於涉及到比較復雜的情況(有時候甚至是美學問題),開發過程很多時候是一個不斷修改的過程,可以方便的修改游戲內容是十分關鍵的。對於很多游戲引擎來說,都有自己編寫的腳本解釋器,用來解釋一些自定義的游戲腳本語言(一般為命令式腳本,比如moveplayer(int x,int y),playersmile()之類的東西),另一些則提供例如lua和rubby等的腳本語言來訪問游戲引擎。由於其虛擬機特性,Java本身就可以用來編寫游戲腳本,目前也有例如beanshell、groovy等腳本語言可以方便的無縫的和Java語言進行交互,這些都極大的方便了Java游戲編程。
3.跨平台
跨平台,每當比較Java與其他語言的時候,總是要談到跨平台。但是在Java游戲領域,write once ,run everywhere,聽起來更像是一個冷笑話。這個笑話有多冷呢?(手機游戲我不熟悉,但是確實有人用“痛苦”來形容開發運行在不同手機上的Java game游戲)對於其他大多數Java游戲來說,或者通過applet或者通過Java web start來部署,這兩種方式無一例外的都要用到瀏覽器。對於Java web start來說,問題相對較小,程序員必須處理的問題主要是如何讓非專業用戶成功安裝指定的JRE版本的問題,雖然很麻煩,但是可以解決的。對於applet來說,問題就變得復雜的多,很多問題只會在特定的操作系統配上特定的瀏覽器時才會出現,即使是同一品牌的瀏覽器,不同的瀏覽器版本也會出現不同的問題,同時這里還涉及到客戶機默認是使用opengl pipeline還是directdraw pipeline的問題。而我們現在甚至還沒有開始討論當3d游戲需要使用底層圖形API時的情況,無論是applet還是web start一旦在程序中使用了任何一種opengl的Java綁定,客戶機各不相同的顯卡以及同一款顯卡的不同驅動都會帶來不同的問題,而這些問題是隨着操作系統和瀏覽器的不同而不同的,操作系統數×瀏覽器數(web start不需要考慮瀏覽器)×顯卡數×每款顯卡的平均的驅動版本數=噩夢。最后你不得不妥協於這樣一個現實-----即使電腦在硬件上滿足程序的要求,你也無法讓你的程序運行在這些電腦中的每一台上,除非你的用戶都是專業人士。
當然,其實現狀並沒有聽起來那么糟糕,對於不使用Java的大多數游戲來說,根本就只能運行在一個平台上,許多游戲對directx或者opengl的版本有要求,更不要提那些運行在家用游戲機上的游戲了,跨平台是整個游戲業的大問題,Java只是像其他人一樣沒有把這個問題徹底解決掉而已,但仍然比其它技術做得要好。不過,值得一提的是,在那些不直接使用硬件加速的網頁小游戲上,Java確實在穩定性和方便安裝上輸給了flash;在家用機方面,Java是0,而微軟的XNA(c#)可以跨Xbox360和Vista。
4.網絡
Java一向強於解決網絡方面的問題,在這方面,Java主要有兩個優勢,第一是基於applet和Java web start的游戲非常容易更新,不會像其他游戲那樣需要用戶手動下載全新版本;第二是Java在網絡交互的API相對比較友好,而對於大型網絡游戲來說,分布式系統非常重要,這正是JCP的巨頭們喜歡的東西,可能由於這是一個賣硬件的好機會,Sun下了不少功夫開發了project dark star來做網絡游戲服務端,由於這個工程還沒有到1.0,所以現在也很難說具體好用不好用。
5.速度
這個沒什么可討論的,基於Java的游戲肯定會比寫得很好的C++程序慢,當然寫一個好的C++程序所花費的龐大的薪水也是Java不能比的。
未來
目前來看Java游戲並沒有出現顯著的上升趨勢,除手機游戲外,Java游戲基本處於蟄伏狀態。未來Java游戲可能迎來幾個契機:
1.Java SE 6 Update N (之前被叫做 "Consumer JRE")的發行
在這個新的版本中,Sun號稱其將讓Java升級更方便,部署更簡單(方便的探測客戶端的Java版本,並安裝程序需要的版本),用戶將能夠只安裝JRE中他們需要的部分,對於暫時用不到的部分可以等到用的時候再安裝,同時加速Java虛擬機的啟動速度(實際上就是在電腦剛開機的時候就啟動Java虛擬機,而不是在第一次運行Java程序的時候),增加對swing的硬件加速支持。而新的Java plug-in將大幅增強applet的穩定性,可靠性,將允許applet更改自己可以使用的內存大小,選擇使用哪個特定版本的JRE執行。
實際上一旦Applet變得穩定,Java面對Flash將體現出巨大的性能優勢,因此Java SE 6 Update N的發布將是Java游戲界未來一段時間內最大的契機。
2.Java FX的發布
Java FX的目標是讓Java FX像Flash一樣易於開發,如果這個項目真的能成功的話,對於Java游戲的影響將非常巨大(不過由於缺乏Flash所擁有的方便的開發工具,我對Java FX成功的可能性深表懷疑)
3.Sony或是任天堂決定在家用游戲機上支持Java
這個的希望非常渺茫的,但是考慮到微軟的XNA做到了跨windows和Xbox360平台,也許Sony在PS3屢遭敗仗的情況下會考慮一下支持Java。實際上現在的家用游戲機就是電腦,很多發燒友已經可以在PS3和WII上運行Java程序了,只是目前Java無法使用這些機器的硬件加速功能。
4.手機進一步發展
目前看來移動設備的功能已經越來越強大,手機的性能也許在不久的將來可以達到電腦的水准,手機游戲也將占據游戲市場越來越大的份額,那么由於手機的操作系統種類繁多,跨平台的Java自然也會越來越受青睞。