HardDriveMIDlet 像一个容器服务于所有canvases,它是表现出一个平面供在手机屏幕上画画。这里midlet包括HardDriveCanvas, 可以扩展javax.microedition.lcdui.game.GameCanvas class。GameCanvas 是一个特殊的canvas意味着为游戏程序制定高效率的动画。
另外一个canvas是HardDriveMIDlet包括的GameOverCanvas,扩展javax.microedition.lcdui.Canvas class。Canvas是一个简单的画布来画文本,行和简单的图形。当需要在屏幕上画画时canvas就被延展了,代替复杂的图形。例如,要显示启动画面,游戏结束画面和游戏指南。一个游戏程序的midlet可能包括很多canvas,但是只有一个canvas通过使用javax.microedition.lcdui.Display class的setCurrent()方法被随时显示。
HardDriveMIDlet还包括了三个重要的方法,也叫做lifecycle methods。它们是startApp(), pauseApp()和destroyApp( ), 对应的是midlet的Active, Paused和Destroyed状态。在HardDriveMIDlet的startApp( )方法中,HardDriveCanvas是实例并且通过使用HardDriveCanvas.的addCommand( ) 方法把EXIT命令添加到它的里面。
HardDriveCanvas.java (Download)
HardDriveCanvas实现了一个java.lang.Runnable接口使它本身运行在自己的线程上,这是独立执行game loop所必要的。Game loop 不段的被执行去运行游戏直到停止游戏的条件实现(在这个例子中,当汽车撞到障碍时或是玩家用Exit键随处推出游戏时)。
Listing 1.2: Game loop of HardDriveCanvas.java
public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...some code
while (gameRunning) //The game loop
{
tick();
input();
render(g);
//... ... ...some code
try
{
Thread.sleep(timeStep );
//... ... ... ...some code
}
catch (InterruptedException ie) { stop(); }
}