论坛首页 移动开发技术论坛

JAVAME学习笔记(3)

浏览 1103 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-01-10  
GameCanvas类提供了基本的游戏用户接口。除了从Canvas继承下来的特性(命令,输入事件等)以外,它还提供了专门针对游戏的功能,比如后备屏幕缓冲和键盘状态查询的能力。



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



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



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



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

Graphics g = getGraphics();

while (true) {

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

      int keyState = getKeyStates();

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

          sprite.move(-1, 0);

      }

else if ((keyState & RIGHT_PRESSED) != 0) {

          sprite.move(1, 0);

      }

      // 将背景清除成白色

      g.setColor(0xFFFFFF);

      g.fillRect(0,0,getWidth(), getHeight());

      // 绘制Sprite(精灵)

      sprite.paint(g);

      // 输出后备缓冲区的内容

      flushGraphics();

}

论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics