文档详情

使用J2ME Polish进行游戏编程

hjk****65
实名认证
店铺
DOC
51KB
约5页
文档ID:178045143
使用J2ME Polish进行游戏编程_第1页
1/5

使用J2ME Polish进行游戏编程——优化J2ME Polish的游戏引擎摘要: J2ME Polish 游戏引擎为MIDP1.0的设备提供了完备的MIDP2.0游戏API在这篇文章中,是从Robert Virkus的 Pro J2ME Polish 摘录的你将学会通过设置各种预处理变量从而优化游戏引擎;在MIDP1.0平台游戏引擎受限的条件下开发以及通过使用低级图形操作、声音重放和设备控制的厂家特殊库,把MIDP2.0的游戏移植到MIDP1.0的平台上作者 Robert Virkus 游戏产业是J2ME最大的市场当你编写J2ME应用时,很可能你就是在写游戏游戏是移动Java的一个巨大的成功事例并且属于3G时代,预期移动领域的主要收入来源是游戏、博彩和女士游戏市场增长的很快,估计2005年世界范围内将达到40亿美元Java社区进程网站针对游戏编程发布了更强的MIDP2.0标准,业界已经有所反应不幸的是,当前主要的只是支持MIDP1.0标准J2ME Polish的游戏引擎出现就是来解决这个问题的在你学习这个章节时,你可以使用J2ME Polish 的游戏引擎快速地把MIDP2.0的游戏移植到MIDP1.0平台上。

使用该游戏引擎 使用MIDP2.0的游戏API编写游戏是很容易的你可能使用了视窗的层管理器等等当你为MIDP1.0开发游戏时,这些特性或许是你非常需要的这就是为什么J2ME Polish 包含一个包装API,以使得你甚至在MIDP1.0设备上也能使用javax.microedition.lcdui.game.* API这个游戏引擎使你再MIDP1.0设备上能够使用所有MIDP2.0游戏API通常,当你使用合适的import声明,源代码是不需要做任何的修改然而存在一些主要的限制,这些限制要求你调整代码,尤其是你无力使用像素级的冲突检测此外,也不是所有的MIDP1.0平台支持这种魔法转换在这片文章的后续章节“在游戏引擎受限下工作”中将讨论如何处理这些限制 使用这个游戏引擎并不困难当你移植到MIDP1.0的设备时,J2ME Polish 在你的代码里自动地编写包装类通过交换import声明就可以完成这项工作所以,你一定要使用合适的import声明,而不是使用类的全名清单1展示了你不应该做的事情清单1. 不该如何使用游戏引擎public class MyGameCanvasextends javax.microedition.lcdui.game.GameCanvasimplements Runnable{   public MyGameCanvas(boolean supress) {      super(supress);   }   public void run() {      // main game-loop   }}当你移植清单1中的代码到MIDP1.0设备上时,该代码将无效。

清单2演示了一个有效的例子,它使用了恰当的import声明清单2. 通过import语句恰当地使用了游戏引擎import javax.microedition.lcdui.game.GameCanvas;public class MyGameCanvasextends GameCanvasimplements Runnable{   public MyGameCanvas(boolean supress) {      super(supress);   }   public void run() {      // main game-loop   }}优化游戏引擎 通过在你的build.xml文件中的部分定义一些预处理变量,你可以调整游戏引擎下面是可以达到的优化效果: •使你的游戏达到全屏模式 •通过使用反向缓冲和平铺图片可以优化TiledLayer的性能 •增加可能平铺图片的数量 •通过执行不完善或者慢的游戏API来激活MIDP2.0设备的游戏引擎全屏模式下运行游戏 通常你可能想在全屏模式下运行游戏你可以通过在你项目的build.xml里使用元素的fullscreen属性来实现。

可取得值为true,false或者menumenu模式允许你设计菜单,只是你得使用J2ME Polish GUI 元素的fullscreen属性使得所有的程序都可以在全屏模式下如果你想在游戏中使用不同的设置,那就通过修改polish.GameCanvas.useFullScreen预处理变量,为GameCanvas定义特性的设置可取得值仍然是true,false,menu清单3演示了在你的程序中使用了通常的GameCanvas全屏模式下,如何使用menu清单3. 使GameCanvas在全屏模式下 当你在GameCanvas中添加命令是,你需要确保是在menu模式下。

menu模式需要你使用J2ME Polish GUI,因此你不能使用paint(Graphics)方法因为这个方法已经在J2ME Polish GUI内部使用了 在这种情况下,你可以使用flushGraphics()方法作为替代如果这也不允许,那你可以为执行paintScreen(Graphics)方法做些预处理而替代paint(Graphics)方法清单4展示了这些清单4. 在全屏模式下使用paintScreen()方法替代paint()import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.Graphics;public class MyGameCanvasextends GameCanvasimplements Runnable{   public MyGameCanvas(boolean supress) {      super(supress);   }   public void run() {      // Main game loop   }   //#if polish.usePolishGui && polish.classes.fullscreen:defined && !polish.midp2      //# public void paintScreen( Graphics g )   //#else      public void paint( Graphics g )   //#endif   {      // Implement the paint method   }} 在TiledLayer中使用反向缓冲 TiledLayer可在屏幕上画多个平铺画面,经常被用来为游戏的背景着色。

反向缓冲优化使用了一个内部图像缓冲器,只有当画面修改了才进行重画全部缓冲被画到屏幕上,而不是分别地画所有的画面这就能够动态地增加你游戏的速度,尤其是在可见的画面偶尔才改变的情况下 反向缓冲优化的缺点是使用了更多的内存,并且你不能使用任何透明的画面因此,在有以下应用时你不能使用反向缓冲优化 •内存受限 •TiledLayer没有当作背景使用 •同时使用多个TiledLayer 通过把polish.TiledLayer.useBackBuffer预处理变量设置为true,你可以激活反向缓冲优化通过设置polish.TiledLayer.TransparentTileColor变量为任意整数值,你可以指定背景的颜色清单5中展示了这些先前透明的画面被着了色清单5. 为TiledLayer激活反向缓冲      把图像分成单个画面 当基本图像被分成单个的画面时,TiledLayer被画出的速度明显加快。

与基本的TiledLayer相比,这个优化需要的内存会多些此外,当设备不支持Nokia的UI API时,传送画面时会有丢失通过把polish.TiledLayer.splitImage预处理变量设置为true,你可以激活这个优化清单6展示了这些清单6. 为TiledLayer激活分割图像优化   定义TiledLayer的grid类型 每一个TiledLayer都使用一个称作grid的内部数组来存放它所包含的画面的信息默认情况下,J2ME Polish使用了byte grid 从而明显减少了内存消耗但是,这也限制了不同的画面的数目最大为128通过修改polish.TiledLayer.GridType预处理变量,你可以把数组默认的byte类型变为int或者short类型清单7显示了如何修改为short类型,这样你就可以使用多达32767种不同的画面,这对于大多数移动游戏都是足够的了清单7. 支持多达32767种不同的画面   使用MIDP2.0设备的游戏引擎 你也可以在MIDP2.0上使用J2ME Polish 程序。

你想这么做或许是因为一些游戏是有漏洞的,或者性能很差为了能在MIDP2.0上使用这个游戏引擎,把polish.usePolishGameApi设置为true即可清单8演示了如何做清单8. 在特殊的MIDP2.0设备上使用J2ME Polish 游戏引擎   资源•这篇文章取自于 Pro J2ME Polish ,Robert Virkus(Apress,July 2005;ISBN:1590595033);•Java社区进程网站;http://jcp.org/en/jsr/%20detail?id=118•阅读取自于Apress J2ME Games with MIDP2 的“Using the MIDP2.0 Game API”,你可以了解更多MIDP2.0,Carol Hamer(JavaWorld,August 2004);http://jcp.org/en/jsr/%20detail?id=118•浏览JavaWorld关于Java 2 Platform, Micro Edition (J2ME)的文章索引,你可以获得更多关于J2ME的文章;•浏览JavaWorld关于Development Tools的文章索引,你可以获得更多关于Java开发工具的文章;。

下载提示
相关文档
正为您匹配相似的精品文档