Public abstract class GameCanvas extends Canvas
GameCanvas类提供了基本游戏用户界面。除此之外继承了Canvas类的功能(commands,input 事件,等等),它也提供特定的游戏功能,比如离屏缓冲区和查询按键状态的能力。
每一个GameCanvas类的实例都会创建一个专用的缓冲区。
一旦为每个GameCanvas实例提供了唯一的缓冲区,它更适合重复利用一个单一的GameCanvas类的实例符合最小的堆栈使用。开发人员可以设想缓冲区的内容只会通过访问从GameCanvas类的实例获得的图形对象改变;内容不会被外部资源改变比如别的MIDlets 或者系统水平的通知。缓冲区开始被白色像数点填充。
缓冲区的大小被设置成GameCanvas的最大尺寸。然而当刷新被调用时,刷新的区域被选择的GameCanvas(会被Ticker,Commands等影响)的尺寸所限制。现在的GameCanvas的尺寸可以通过调用getWidth和getHeight这两个方法获得。
一个游戏可以提供一个线程去运行游戏循环。一个典型的循环会检查输入,执行游戏逻辑并更新用户界面。一下的代码是一个典型的游戏循环结构:
// 得到离屏缓冲区的Graphics对象
Graphics g = getGraphics();
while (true) {
// 检查输入并更新需要更新的位置
intkeyState = getKeyStates();
if ((keyState& LEFT_PRESSED) != 0) {
sprite.move(-1, 0);
}
else if ((keyState& RIGHT_PRESSED) != 0) {
sprite.move(1, 0);
}
// Clear the background to white用白色清屏
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(), getHeight());
//画精灵
sprite.paint(g);
// 刷新离屏缓冲区
flushGraphics();
}