基于Java的移动游戏开发入门(二)

2014-11-23 21:54:59 · 作者: · 浏览: 13
stener {
... ... ... ... ... ... ... ...
  HardDriveMIDlet还实现了javax.microedition.lcdui.CommandListener接口来接收命令事件,它们是在应用程序执行和处理期间产生的。当发出EXIT,CANCEL,BACK,OK,STOP以及类似的命令-这些命令通过使用软按钮(在移动电话屏幕附近的特殊的按钮,除了箭头键以外)产生并被HardDriveMIDlet的commandAction()方法所处理-时,这些命令事件发生。为了提高效率,可把这些命令添加到画布上去。

  HardDriveMIDlet用作所有canvas的容器,这些canvas是一些描述可用于在移动设备屏幕上进行绘制的对象。这里,midlet包含了HardDriveCanvas,它扩展了javax.microedition.lcdui.game.GameCanvas类。GameCanvas是一个专门的画布,用于为游戏程序绘制有效的动画图像,还能够查询为实现平滑动画效果而采取的脱屏图像缓冲技术有关的关键状态。

  HardDriveMIDlet包含的另外的一个canvas是GameOverCanvas,它扩展了javax.microedition.lcdui.Canvas类。Canvas是一个简单canvas,用于绘制文本,线段以及简单的形状等。当需要在屏幕上进行简单的绘制时-例如为显示游戏初启画面,游戏结束屏幕以及游戏指令屏幕-这个canvas被扩展,而取代了繁重的绘制。一个游戏程序的midlet可以包括任何个数的canvas,但是每次仅显示一个canvas,这是通过使用javax.microedition.lcdui.Display类的setCurrent()方法来实现的。

  HardDriveMIDlet还包含3个另外的重要方法,也称作lifecycle方法。它们是startApp()、pauseApp()和destroyApp(),分别相应于该midlet的Active,Paused和Destroyed状态。在HardDriveMIDlet的startApp()方法中,实现实例化HardDriveCanvas并通过使用HardDriveCanvas类的方法addCommand()把EXIT命令添加到它上面去。

  (二) HardDriveCanvas.java

  HardDriveCanvas实现了一个java.lang.Runnable接口来使它自己可以运行在自己的线程中,这对于独立地执行游戏循环是必需的。该游戏循环被连续不断地执行,直到终止游戏的必备条件满足为止(在本例中,当汽车碰撞到障碍物上或者在任何时候当玩家使用Exit按钮退出游戏)。

  列表1.2:文件HardDriveCanvas.java中的游戏循环

public void start()
{
gameRunning = true;
Thread gameThread = new Thread(this);
gameThread.start();
}
... ... ... ...
... ... ... ...
public void run()
{
Graphics g = getGraphics();
//... ... ...一些代码
while (gameRunning) //游戏循环
{
tick();
input();
render(g);
//... ... ...一些代码
try
{
Thread.sleep(timeStep );
//... ... ... ...一些代码
}
catch (InterruptedException ie) { stop(); }
}

  列表1.2显示HardDriveCanvas.java中的游戏循环。这是一典型游戏循环,它包含了依次对tick(),input()和render()方法的调用。tick()方法检查是否停止该游戏的必需条件已经满足;如果满足