J2ME中的 GAME API介绍[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

TiledLayer又称“砖块”,这个类允许开发者在不必使用非常大的Image对象的情况下创建一个大的图像内容。TiledLayer有许多单元格构成,每个单元格能显示由一个单一Image对象提供的一组贴图中的某一个贴图。单元格也能被动画贴图填充,动画贴图的内容能非常迅速地变化;这个功能对于动画显示非常大的一组单元格非常有用,例如一个充满水的动态区域。

 

在游戏中,某些方法如果改变了LayerLayerManagerSpriteTiledLayer对象的状态,通常并不能立刻显示出视觉变化。因为这些状态仅仅存储在对象里,只有当随后调用我们自己的paint()方法时才会更新显示。这种模式非常适合游戏程序,因为在一个游戏循环中,一些对象的状态会更新,在每个循环的最后,整个屏幕才会被重绘。基于轮询也是现在视频游戏的基本结构。

 

6.2    GameCanvas的使用

GameCanvas类提供了基本的游戏用户接口。除了从Canvas继承下来的特性(命令,输入事件等)以外,它还提供了专门针对游戏的功能,比如后备屏幕缓冲和键盘状态查询的能力。

 

每个GameCanvas实例都会有一个为之创建的专用的缓冲区。因为每个GameCanvas实例都会有一个唯一的缓冲区。可以从GameCanvas实例获得其对应的Graphics对象,而且,只有对Graphics对象操作,才会修改缓冲区的内容。外部资源如其他的MIDlet或者系统级的通知都不会导致缓冲区内容被修改。该缓冲区在初始化时被填充为白色。

 

缓冲区大小被设置为GameCanvas的最大尺度。然而,当请求填充时,可被填充的区域大小会受限于当前GameCanvas的尺度,一个存在的TickerCommand等等都会影响到GameCanvas的大小。GameCanvas的当前大小可以通过调用getWidthgetHeight获得。

 

一个游戏可能提供自己的线程来运行游戏循环。一个典型的循环将检查输入,实现游戏逻辑,然后渲染更新后的用户界面。以下代码演示了一个典型的游戏循环的结构:

 

 // 从后备屏幕缓冲获得Graphics对象

 Graphics g = getGraphics();

 while (true) {

      // 检查用户输入并更新位置,如果有需要

      int keyState = getKeyStates();

      if ((keyState & LEFT_PRESSED) != 0) {

          sprite.move(-1, 0);

      }

本文关键:J2ME中的 GAME API介绍
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top