⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playtanksprite.java

📁 1) 图像的基本操作; 2) ImageObserver接口、ImageProducer接口的应用; 3) FilteredImageSource类、ImageFilter类、CropImageF
💻 JAVA
字号:
package tankgame611;
import java.applet.Applet;
import java.awt.Image;
import java.awt.event.*;

public class PlayTankSprite extends SpriteDrawing{
  int AppletWidth, AppletHeight;
  int myTankWidth, myTankHeight;
  int direction;
  int myTankX, myTankY;
  Image myTankImg[];
  Applet GameApplet;
  static int speed = 5;
  ShellSprite shell;
  boolean keyIsReleased = false;   //是否按键不放

  public PlayTankSprite(Image[] myTankImg,
                          int myTankX,
                          int myTankY,
                          ShellSprite shell,  //炮弹的实例
                          Applet GameApplet) {
    //调用父类的创建方法
    super(myTankImg, myTankX, myTankY, GameApplet);
    this.myTankX = myTankX;
    this.myTankY = myTankY;
    this.myTankImg = myTankImg;
    this.shell = shell;
    this.GameApplet = GameApplet;
    AppletWidth = GameApplet.getWidth();
    AppletHeight = GameApplet.getHeight();
    direction = 2;
    setVisible(true);
    setActive(false);
    //为Applet加上键盘事件侦听
    GameApplet.addKeyListener(new keyAction());
  }

  //SpiritDirection : 0=左; 1=右; 2=上; 3=下;
  public void updatePos(int SpiritDirection) {
    //移动坦克
    switch (SpiritDirection) {
      case 0: //左
        if (myTankX <= 0)//设定坦克的左边界
          myTankX = 0;
        else
          myTankX = this.getX() - speed;
        break;
      case 1: //右
        if (myTankX >= AppletWidth - myTankWidth) //设定坦克的右边界
          myTankX = AppletWidth - myTankWidth;
        else
          myTankX = this.getX() + speed;
        break;
      case 2: //上
        if (myTankY <= 0)//设定坦克的上边界
          myTankY = 0;
        else
          myTankY = this.getY() - speed;
        break;
      case 3: //下
        if (myTankY >= AppletHeight - myTankHeight)//设定坦克的下边界
          myTankY = AppletHeight - myTankHeight;
        else
          myTankY = this.getY() + speed;
        break;
    }
    //设定坦克图像的最新位置
    this.setPos(myTankX, myTankY);
  }

  public int getTankDirection(){
    return direction;
  }

  //调整炮弹的位置
  public void setShellPos(int direction) {
    switch (direction) {
      case 0: //左
        shell.setPos(myTankX - shell.getWidth(),
                             myTankY + (myTankHeight - shell.getHeight()) / 2);
        break;
      case 1:
        shell.setPos(myTankX + myTankWidth + shell.getWidth(),
                             myTankY +
                             (myTankHeight - shell.getHeight()) / 2);
        break;
      case 2:
        shell.setPos(myTankX +
                             (myTankHeight - shell.getHeight()) / 2,
                             myTankY - myTankWidth / 2);
        break;
      case 3:
        shell.setPos(myTankX +
                             (myTankHeight - shell.getHeight()) / 2,
                             myTankY + myTankWidth);
        break;
    }
  }

  //使用内部类实现按键事件处理
  class keyAction extends KeyAdapter {
    long startTime, endTime;
    public void keyPressed(KeyEvent e) {
      startTime = System.currentTimeMillis();
      myTankWidth = myTankImg[0].getWidth(GameApplet);
      myTankHeight = myTankImg[0].getHeight(GameApplet);
      if (e.getKeyCode() == e.VK_SPACE) { //发射炮弹的处理
        if (keyIsReleased == true) { //释放了键(防止长按键不放)
          shell.setShellDirection(direction);
          setShellPos(direction);
          shell.setVisible(true);
          shell.setActive(true);
          keyIsReleased = false; //未释放了键
        }
      }
      if (e.getKeyCode() == e.VK_LEFT) {
        direction = 0;
        setActive(true);
      }
      if (e.getKeyCode() == e.VK_RIGHT) {
        direction = 1;
        setActive(true);
      }
      if (e.getKeyCode() == e.VK_UP) {
        direction = 2;
        setActive(true);
      }
      if (e.getKeyCode() == e.VK_DOWN) {
        direction = 3;
        setActive(true);
      }
    }
    public void keyReleased(KeyEvent e) {
      endTime = System.currentTimeMillis();
      if(endTime-startTime>50){  //防止快速按键切换带来的短暂停顿
        setActive(false);
      }
      keyIsReleased = true;  //释放了键
    }
  }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -