站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题使用MIDP2.0的方法构造游戏循环

使用MIDP2.0的方法构造游戏循环

摘要: 使用MIDP2.0的方法构造游戏循环
下面是使用MIDP2.0的方法构造游戏循环:

作者:



对于MIDP2.0来说构造游戏循环的方法是相同的,但也有区别。因为MIDP2.0使用GameCanvas类,该类不同于Canvas类,在于它的特性,因为它本身支持双缓冲区(这一点我们将在后面的文章里提到),所以,他的绘图函数部分就和Canvas类不相同。其中第一点不同在于,名称,使用GameCanvas类我们不必非的使用paint()函数绘制图像,我们可以根据自己的爱好给她取名;第二点,因为Canvas类的paint()方法中有Graphics类的一个实例作为参数,所以我们可以直接使用该参数进行绘图。但是使用GameCanvas类后,因为绘图函数是自己定义的,所以我们还得使用Graphics g = getGraphics();语句得到一个Graphics类的实例;第三点,因为使用双缓冲区,也就是说,绘图不是直接作用于屏幕,所以我们还得使用flushGraphics();来强制将屏幕缓冲区的内容绘制到屏幕上。
看看下面的例子:
/**
* 文件名:Ocanvas.java
* 画布类
*/


import javax.microedition.lcdui.*;
//MIDP2.0要添加下面的库import javax.microedition.lcdui.game.*;
import java.util.*;
import java.io.*;

public class OCanvas extends GameCanvas implements Runnable {

//定义变量
private Display display;
private boolean sleeping;
private long frameDelay;

private int x,y;
private int XSpeed , YSpeed;

public OCanvas(Display d) {
//类构造函数,初始化类变量
super(true);
display = d;

// 设置帧频 (30 fps)
frameDelay = 33;
}

public void start() {

// 设置这个画布为当前屏幕
display.setCurrent(this);

// 初始化一些游戏中的变量,载入相关图片
x=getWidth()/2-10;
y=getHeight()/2-10;
XSpeed = YSpeed = 3;


// 开始动画线程
sleeping = false;
Thread t = new Thread(this);
t.start();
}

public void stop() {
// 停止动画线程
sleeping = true;
}

public void run() {
// 动画线程开始后运行
//得到Graphics类的一个实例,才能绘制图像
Graphics g = getGraphics();

// 主游戏循环
while (!sleeping) {
//更新游戏中的数据变量
update();
//更新屏幕显示,我们自定义的draw函数
draw(g);
//线程休眠
try {
Thread.sleep(frameDelay);
}
catch (InterruptedException ie) {}
}
}

//在这里更新游戏中的数据变量
private void update() {

x=XSpeed+x;
y=YSpeed+y;
if (x < 0)
x=getWidth();
if(x>getWidth())
x=0;
if (y < 0)
y=getHeight();
if(y>getHeight())
y=0;

}

//在这里对屏幕进行绘制
private void draw(Graphics g) {
// 清除屏幕
g.setColor(0xffffffff);
g.fillRect(0, 0, getWidth(), getHeight());

// 重绘屏幕
g.setColor(0,0,0);
g.fillRect(x,y,20,20);
// 刷新屏幕缓冲区
flushGraphics();
}

}
这里我们使用了简单的绘制方块的函数,使方块在游戏循环中不断地变换位置,形成一个动画。



2006-11-11 09:27 PM

↑返回目录
前一篇: J2ME的现状与发展(转贴)
后一篇: 使用线程构造游戏循环