2011-07-03 LGame-0.3.1-Update:
(內含源碼、jar以及九種不同類型的遊戲樣本):http://loon-simple.googlecode.com/files/LGame-0.3.1.7z
1、自0.3.1版起,JavaSE與Android版映像渲染部分均轉為OpenGL(ES)實現,在大多數支援GLES硬體渲染的Android機型中,架構效能至少會有20%-50%不等的提升。但是,在少數僅支援GLES軟體渲染的機型中,效能將會出現20%-50%不等的下降(含模擬器 -﹏-||| )……
2、為不破壞原有架構結構,並充分發揮OpenGL效能,在保留原有LImage,LFont,LColor,LGraphics等繪圖類的基礎上,渲染方式做如下兩點變動:
2.1、原有基礎遊戲畫布由LGraphics轉為GLEx,該類為OpenGL(ES),JavaSE,JavaME的常用渲染API整合,即便使用者完全不瞭解OpenGL渲染機制,同樣可以延續LGraphics的使用方法。另外,此類雖然不再允許直接渲染Android的Bitmap以及JavaSE的Image,卻可以像舊版的LGraphics一樣直接渲染LImage,而新增的專用紋理類LTexture,同樣也可以經由LPixmap,LImage,Bitmap,Image轉換產生。
2.2 為適應OpenGL色彩機制,舊版原有的LColor類不被允許直接使用於GLEx之上,而只允許使用新增的GLColor類。但是,該類API部分實際上與原有的LColor如出一轍(其內部就是將色彩分量除以255轉為OpenGL使用的浮點數值罷了|||)。最後,舊有的LFont依舊在GLEx類中通用,其它部分與舊版沒有任何區別。
3、統一封裝了Android版與JavaSE版的人機互動裝置介面,所有鍵盤事件一律封裝為LKey類,所有滑鼠事件一律封裝為LTouch類,不久後會發布的WP7版以此為例。
4、為避免架構過快膨脹,自0.3.1版起LGame核心jar不再內建open JDK的geom包,這將導致Android版LGraphics類功能略有減少,但鑒於核心渲染類已經轉為GLEx,因此對舊版使用者造成的影響可以說非常微小。此外,由於LGame自動產生映像形狀依賴此包,所以它並沒有被遺棄,而是轉移到了physics擴充包中。
5、為儘可能壓縮架構體積,此版架構結構略有變動,原有的map包下形狀組件一律被放入舊版的geom包下,原有的window包被更名為component,原有window包及其子包中類一律被放入此包,並新增task、input、opengl、particle四個組件包及相關類。
6、修正了所有已發現的舊版BUG,並微調了架構顯示方式,以儘可能適應絕大多數機型的運行需求。
關於使用OpenGLES的幾點注意事項:
1、OpenGLES對於Android系統而言絕非萬靈丹,即便代碼最佳化的多麼完善,也並不意味著在所有Android手機上都一定可以跑出同樣理想的速度與效果。事實上,OpenGLES的高效只體現在能夠支援硬體渲染的那一部分手機機型上,而對於僅支援軟體渲染的機器則【徹底】無能為力。對這部分手機而言,GLES的渲染速度甚至不如Canvas繪圖來得高效。
說到目前Android手機中最為普及的GLES軟體渲染實現,則首推Google提供的Android Pixelflinger(當前最高版本1.4),假如您通過真機的OpenGLES取GL_RENDERER參數時“僅僅”看到了“Android Pixelflinger”字樣出現的話,就意味著這台機器必定與GLES開發無緣,請換一部手機,或者改回Canvas開發吧(當然也可以做兩個版本,讓使用者自行選擇)。實際上,在HTC的部分低端機型、LG的部分低端機型、Archos的部分低端機型,以及一切使用了國內某星早期解決方案的機型中,全部可以看到Android
Pixelflinger“單獨出現”,如果誰在這批低端手機中選擇GLES進行遊戲開發,則無異選擇了讓馬車拉著火車跑一樣恐怖。
再者,不同廠商提供的GLES硬體渲染其實也存在著不同程度的效果差異(別以為所有廠商都完完整整的遵循OpenGL規範幹活),小弟在這裡推薦http://www.glbenchmark.com這個比較權威的網站進行相關查詢,其中提供有絕大多數常見智能機的GL,EGL參數列表,並且附帶有各種機型真機的FPS測試資料。要知道“失之毫釐,謬以千裡”,如果手機本身的OpenGL效能就是dog shit,那麼跑在shit上的東西多半也會成為shit。
2、使用OpenGLES進行遊戲編程,在大多數情況下意味著您必需放棄模擬器的使用,而僅能以真機或者PC版架構進行開發。因為Android模擬器預設基於Android Pixelflinger,軟體渲染GLES本就不快的速度,到了模擬器上更會氣得您將電腦砸掉。
3、為照顧舊版的Canvas實現,現階段改版只完成了LGame渲染核心的OpenGL化,也就是基本延續舊版API,僅變動函數的具體實現代碼。然而,由於OpenGL與Canvas在運行機制上存在有一定差異,就渲染效率而言這顯然並非最優選擇,故此未來還有相當巨大的最佳化空間。(舉個例子,在任意機型中以Canvas顯示一幅1024x1024的Bitmap映像雖然都會很慢,但絕不至於將FPS壓到個位元。然而,在某些機型中如果以GLES載入一副此尺寸的紋理,就很可能瞬間讓FPS低於10,但讓同樣的機器同時跑數張512x512的紋理,速度卻依舊在50-60晃蕩,這就是差異的體現。題外話,0.3.2將改進的重點之一就是“自動合并小圖為統一紋理,自動分解大圖為合理的紋理數量”)
4、舊版的Canvas實現並沒有徹底廢止,只會作為一個特殊版本不再更新版本號碼(也就是無論怎麼改,版本號碼都是0.3),假如您使用GLES實現開發的並不順利,也可以選擇換回舊版,它依舊提供BUG修正與開發支援……
PS:本次改版並沒有影響到原有程式的代碼結構,所以原有樣本也全部可以在新版通用,比如不久前發布的SRPG樣本(新版中運行畫面如)。
另外,此次改版又額外增加了一項ACT遊戲樣本(其實,是用很早以前博文中發布的同類樣本修改而成……),鑒於有不少網友詢問聲效播放的問題,所以用此例子來示範一下(新版中運行畫面如)。
(內含源碼、jar以及九種不同類型的遊戲樣本):http://loon-simple.googlecode.com/files/LGame-0.3.1.7z
——————————————————————————————
除Android版之外,LGame的WP7與iPhone版也在開發當中,WP7版直接使用XNA封裝,移植起來異常省事,加上文法基本一致,年底發布毫無問題;而iPhone版是做C/C++遷移(實在無法忍受objective-c的文法|||),等於將原有代碼重構一次,預計到明年年初才能完成。
另外還有兩個準備中的平台,一個是HTML5,考慮到WebGL技術的未來發展,對網頁遊戲引擎的需求應該會越來越大,複雜度也會越來越高,此時出手正是時機;另外一個就是JavaFx,這玩意自2.0版重構以後的發展方向還是未知數,如果Oracle發力或許還有得玩,個人對它持悲觀態度,看Java的面子準備瞧瞧再說……
PS:好久沒上線,發現CSDN部落格系統改版,有點不會用,小弟文章效果有問題的話萬望海涵,手生的關係……