J2ME游戏的检测方法

检测方法如下:

私有布尔notMiss( ) {

//return player . collides with(ball,false);

int ball CX = ball . getx()+ball . getwidth()/2;

int ballCY = ball . gety()+ball . getheight()/2;

int player CX = player . getx()+player . getwidth()/2;

int player cy = player . gety()+player . getheight()/2;

return((math . ABS(player CX-ballCX)& lt;ball . getwidth()/2)& amp;& amp

(math . ABS(ballCY-player cy)& lt;5));

}

已经标注好的线直接用Sprite进行碰撞检测,后面的部分是计算两幅图像是否重叠,效果差不多。collidesWith()的第二个参数告诉内部方法是否使用像素级检测。通常答案是永远不会,这很慢,也没必要这么精确。

为了说明整个游戏的控制逻辑,我们来看一下MIDletGetBall这个类,它和通常的MIDlet略有不同,因为我把主线程放在了CanvasGetBall中,MIDletGetBall只是简单地控制主线程。

public void startMainThread() {

Display.getDisplay(this)。setCurrent(可显示);

if(mainThread!= null) {

mainThread = null

Runtime.getRuntime()。GC();

}

mainThread =新线程(可显示);

main thread . start();

}

第一行是设置当前显示的页面;也就是说显示CanvasGetBall。

回到CanvasGetBall,整个游戏分为几个阶段,有不同的画面和命令界面,具体描述如下:

1.等待开始,对应于方法ready():

公共void就绪(){

cover . settitle(TIPS[2]);

cover . add command(play command);

display . get display(midlet getball . instance)。setCurrent(封面);

}

为了绘图方便,使用了一个GameCanvas来绘制提示信息和响应命令,并根据玩家的操作在CanvasCover和CanvasGetBall之间来回切换。

2.游戏屏幕,包括开始和结束方法:

public void start() {

如果(!正在播放){

str tip = TIPS[0];

玩=真;

midlet getball . instance . startmainthread();

remove command(play command);

remove command(resume command);

add command(pauseCommand);

ball . start();

尝试{

if(tonePlayer!= null) {

tone player . start();

}

}

catch (MediaException ex) {

tone player . close();

tonePlayer = null

}

}

}

公共无效站点(){

如果(播放){

ball.stop()。

str tip = TIPS[1];

尝试{

thread . sleep(300);

}

catch(中断的例外){

}

玩=假;

remove command(pauseCommand);

add command(resume command);

尝试{

tone player . stop();

}

catch(media exception ex 1){

tone player . close();

tonePlayer = null

}

}

}

并设置相应的命令使玩家能够继续,形成一个简单的闭环控制。

3.游戏结束了,对应的方法gameover()

public void gameover() {

this . stop();

cover . settitle(TIPS[3]);

cover . remove command(play command);

cover . add command(restart command);

display . get display(midlet getball . instance)。setCurrent(封面);

}

至此,基本完成。请详细研究源代码。其实没必要读太多书。深入研究一个问题,根据自己的理解进行改进或修正。实践是最好的老师。希望大家都能有所收获。