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