📄 bulletssprite.java
字号:
package src;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.game.Sprite;public class BulletsSprite extends Sprite implements Runnable { private int fx;// 子弹方向 private int sd;// 子弹速度 public int user; private boolean lift = false; int row, column; // Sprite sprite; public BulletsSprite(Image image, int frameWidth, int frameHeight) { super(image, frameWidth, frameHeight); } public void start(int mx, int my, int mfx, int msd, int master) {// 坦克坐标(mx,my)定位子弹坐标,mfx为子弹方向,msd为子弹速度 if (!lift) { setPosition(mx + 6, my + 6); fx = mfx; sd = msd; user = master; lift = true; setVisible(lift); Thread thread = new Thread(this); thread.start(); } } public void run() { while (lift) { // long times_s = System.currentTimeMillis(); forward(sd, fx); // 检测子弹碰撞! bullettick(); // long times_e = System.currentTimeMillis(); // long times = times_e - times_s; // if (times > 20) { // times = 20; // } try { Thread.sleep(20); } catch (InterruptedException ie) { ie.printStackTrace(); } } } public void forward(int b_sd, int b_fx) { if (b_fx == 1) { bulletsMove(b_sd, 0); } else if (b_fx == 2) { bulletsMove(b_sd, 0); } else if (b_fx == 3) { bulletsMove(0, b_sd); } else if (b_fx == 4) { bulletsMove(0, b_sd); } } public void bullettick() { if (this.collidesWith(TankCanvas.groundBoard, true)) { row = (this.getX() + 1) / 15; // 15是每张贴图(小砖块)的像素(长=宽=14) column = (this.getY() + 1) / 15; // MicroTankCanvas.explosion.start(this.getX(),this.getY());//调用爆炸方法 try { TankCanvas.groundBoard.setCell(row, column, 0); // TankCanvas.groundBoard.setCell(column + 1, row, 0); // TankCanvas.groundBoard.setCell(column + 1, row + 1, 0); // TankCanvas.groundBoard.setCell(column - 1, row - 1, 0); // TankCanvas.groundBoard.setCell(column - 1, row, 0); // TankCanvas.groundBoard.setCell(column, row + 1, 0); // TankCanvas.groundBoard.setCell(column, row + -1, 0); } catch (Exception e) { // TODO: handle exception } setVisible(false); this.lift = false; // Thread.yield(); }else if ( (this.collidesWith(TankCanvas.enemytanksprite, true)) && (user==1)) { //TankCanvas.explosion.start(getX(),getY());//调用爆炸方法 TankCanvas.enemytanksprite.elift=false; TankCanvas.enemytanksprite.setVisible(false); TankCanvas.tankLayermanager.remove(TankCanvas.enemytanksprite); TankCanvas.enemytanksprite.stop(); this.setVisible(false); this.lift=false; TankCanvas.enum=TankCanvas.enum-1; Thread.yield(); if (TankCanvas.enum>0) { TankCanvas.createEnemyTank(); }else{// 进入下一关 } } else if ((collidesWith(TankCanvas.playerTank, true)) && (user == 0)) {// MicroTankCanvas.explosion.start(getX(),getY());//调用爆炸方法 TankCanvas.enemytanksprite.setVisible(false); TankCanvas.tankLayermanager.remove(TankCanvas.enemytanksprite); this.setVisible(false); this.lift = false; TankCanvas.num = TankCanvas.num - 1; Thread.yield(); if (TankCanvas.num > 0) { TankCanvas.createTank(); } else { // 结束游戏 TankCanvas.gameover = true; } } } public void stop() { Thread.yield(); } private void bulletsMove(int kx, int ky) { int bx = getX(); int by = getY(); bx += kx; by += ky; if (by < 0 || by > TankCanvas.canvasWidth) { this.setVisible(false); lift = false; Thread.yield(); } if (bx < 0 || bx > TankCanvas.canvasWidth) { this.setVisible(false); lift = false; Thread.yield(); } setPosition(bx, by); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -