下载地址(内含源码、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博客系统改版,有点不会用,小弟文章效果有问题的话万望海涵,手生的关系……