j2me游戏里面如何实现游戏的暂停
这是一个打地鼠的游戏,游戏中地鼠类继承了timertask,锤子是监听键盘的,问题是我想是gamecanvas里面添加两个按键可以暂停和继续游戏
package Mouse;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.Vector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import com.sun.midp.ssl.PublicKey;
public class MainGameCanvas extends GameCanvas implements Runnable, CommandListener {
private Graphics g;
//地鼠洞
private Image hold_img;
//老鼠
private Image mouse_img;
//锤子
private Image hammer_img;
//锤子
private Sprite hammer;
//老鼠
private Sprite mouse;
//向量存储
private Vector vc;
final int x = getWidth() / 2;
final int y = getHeight() / 2;
private Timer timer;
private MouseMoveTask mtask;
Score score;
private int delaytime=0;
private Command pauseCommand,continueCommand;
//构造方法,参数的作用是表示是否一致传统键盘事件(包括keyPressed()、
//keyReleased()和keyRepeated()),true—是(不调用),false—否(调用)
protected MainGameCanvas(boolean suppressKeyEvents) {
super(suppressKeyEvents);
g = getGraphics();
vc = new Vector();
pauseCommand=new Command("暂停", Command.CANCEL, 1);
continueCommand=new Command("继续", Command.OK, 2);
//实例化image
try {
hold_img = Image.createImage("/images/hole.png");
mouse_img = Image.createImage("/images/mouse.png");
hammer_img = Image.createImage("/images/hammer.png");
} catch (IOException e) {
e.printStackTrace();
}
//hammer
hammer = new Sprite(hammer_img, 42, 40);
hammer.setVisible(false);
//画洞
drawHold();
//在四个地方mouse,设置初始显示,添加进vc
mouse = new Sprite(mouse_img, 32, 34);
mouse.setPosition(x - 15, y - 70);
mouse.setFrame(2);
mouse.paint(g);
vc.addElement(mouse);
mouse = new Sprite(mouse_img, 32, 34);
mouse.setPosition(x + 37, y - 20);
mouse.setFrame(2);
mouse.paint(g);
vc.addElement(mouse);
mouse = new Sprite(mouse_img, 32, 34);
mouse.setPosition(x - 15, y + 30);
mouse.setFrame(2);
mouse.paint(g);
vc.addElement(mouse);
mouse = new Sprite(mouse_img, 32, 34);
mouse.setPosition(x - 65, y - 20);
mouse.setFrame(2);
mouse.paint(g);
vc.addElement(mouse);
score=new Score();
//启动timertask
timer=new Timer();
mtask=new MouseMoveTask(vc,score);
timer.schedule(mtask, delaytime, 1000);
this.addCommand(pauseCommand);
this.addCommand(continueCommand);
this.setCommandListener(this);
flushGraphics();
}
//画洞
public void drawHold() {
//上
g.drawImage(hold_img, x, y - 50, Graphics.TOP | Graphics.HCENTER);
//下
g.drawImage(hold_img, x, y + 50, Graphics.TOP | Graphics.HCENTER);
//左
g.drawImage(hold_img, x - 50, y, Graphics.TOP | Graphics.HCENTER);
//右
g.drawImage(hold_img, x + 50, y, Graphics.TOP | Graphics.HCENTER);
}
//锤子监听事件
public void run() {
while (true) {
g.setColor(0xFF00FF00);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0);
g.drawString("分数:"+String.valueOf(score.totalScore), 10, 10, 0);
drawHold();
int k = getKeyStates();
if ((k & GameCanvas.UP_PRESSED) != 0) {
System.out.println("===");
hammer.setVisible(true);
hammer.setPosition(x - 30, y - 95);
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 2; ++i) {
hammer.setFrame(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//每次锤子向下的时候都挨个和VC里面的mouse检测
for (int i = 0; i < vc.size(); ++i) {
Sprite tmp = (Sprite) vc.elementAt(i);
if (hammer.collidesWith(tmp, true)) {
System.out.println("==1=");
//如果检测撞到就显示最后一帧
tmp.setFrame(3);
score.raiseScore();
ScoreSleep();
tmp.paint(g);
}
}
hammer.setVisible(false);
hammer.setFrame(0);
}
}).start();
}
if ((k & GameCanvas.DOWN_PRESSED) != 0) {
System.out.println("===");
hammer.setVisible(true);
hammer.setPosition(x - 30, y + 5);
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 2; ++i) {
hammer.setFrame(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = 0; i < vc.size(); ++i) {
Sprite tmp = (Sprite) vc.elementAt(i);
if (hammer.collidesWith(tmp, true)) {
System.out.println("==1=");
tmp.setFrame(3);
score.raiseScore();
ScoreSleep();
tmp.paint(g);
}
}
hammer.setVisible(false);
hammer.setFrame(0);
}
}).start();
}
if ((k & GameCanvas.LEFT_PRESSED) != 0) {
System.out.println("===");
hammer.setVisible(true);
hammer.setPosition(x - 80, y - 45);
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 2; ++i) {
hammer.setFrame(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = 0; i < vc.size(); ++i) {
Sprite tmp = (Sprite) vc.elementAt(i);
if (hammer.collidesWith(tmp, true)) {
System.out.println("==1=");
tmp.setFrame(3);
score.raiseScore();
ScoreSleep();
tmp.paint(g);
}
}
hammer.setVisible(false);
hammer.setFrame(0);
}
}).start();
}
if ((k & GameCanvas.RIGHT_PRESSED) != 0) {
System.out.println("===");
hammer.setVisible(true);
hammer.setPosition(x + 20, y - 45);
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 2; ++i) {
hammer.setFrame(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i = 0; i < vc.size(); ++i) {
Sprite tmp = (Sprite) vc.elementAt(i);
if (hammer.collidesWith(tmp, true)) {
System.out.println("==1=");
tmp.setFrame(3);
score.raiseScore();
ScoreSleep();
tmp.paint(g);
}
}
hammer.setVisible(false);
hammer.setFrame(0);
}
}).start();
}
paint();
flushGraphics();
//键盘去抖动
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// }
//把sprite画上去
public void paint() {
for (int i = 0; i < vc.size(); ++i) {
((Sprite) vc.elementAt(i)).paint(g);
}
hammer.paint(g);
}
//敲击时得分后延迟
public void ScoreSleep(){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//监听cmd
public void commandAction(Command c, Displayable arg1) {
//暂停游戏
if (c==pauseCommand) {
}
//继续游戏
if (c==continueCommand) {
//线程唤醒
}
}
}