让我们的坦克欢快的动起来吧

本文介绍了如何使用Java创建一个基础的坦克类,并通过继承创建自己的英雄坦克。关键在于实现坦克的移动方法以及利用事件监听机制,特别是`KeyListener`接口,来响应用户键盘输入,控制坦克上下左右移动。当按下键盘键时,坦克会根据指定方向移动,并通过调用`repaint()`方法实现画面的更新,展示坦克的动态效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🛫创建父类坦克类

  • 🪂🪂🪂这个类是作为以后创建自己的坦克和敌人的坦克的子类
  • 实现很简单 主要是定义一些属性
    • 坦克的位置
    • 坦克的速度
    • 坦克的方向
public class Tank {

    //面向对象!!!!!!!充分体现
    private int x;
    private int y;
    private int direct;
    private int speed =1;

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public void moveUp(){
        y-=speed;
    }

    public void moveDown(){
        y+=speed;
    }

    public void moveLeft(){
        x-=speed;
    }

    public void moveRight(){
        x+=speed;
    }
    public int getDirect() {
        return direct;
    }

    public void setDirect(int direct) {
        this.direct = direct;
    }

    public Tank(int direct) {
        this.direct = direct;
    }

    public Tank(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}

🚍创建自己坦克

public class Hero extends Tank {

    public Hero(int x, int y) {
        super(x, y);
    }
}

🏃‍♂️🏃‍♂️🏃‍♂️动起来

要想让坦克动起来,必须要在我们定义的画板类上实现一个接口

  • 事件监听机制

  • public class Mypanel extends JPanel implements KeyListener{}
    
  • 然后要实现他的所有方法,但是我们这个需求用到的只有其中的一个方法

 @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_W){
           if(hero.getY()>0){
               hero.moveUp();
           }
            hero.setDirect(0);
        } else if (e.getKeyCode()==KeyEvent.VK_D) {
            if(hero.getX()+60<1000){
                hero.moveRight();
            }
            hero.setDirect(1);
        }
        else if (e.getKeyCode()==KeyEvent.VK_S) {
            if (hero.getY()+60<750){
                hero.moveDown();
            }
            hero.setDirect(2);
        }else if (e.getKeyCode()==KeyEvent.VK_A) {
            if (hero.getX()>0){
                hero.moveLeft();
            }
            hero.setDirect(3);
        }
        
        this.repaint();
        注意!!!
        🌈🌈🌈🌈🌈
        这行代码是重点!千万不要忘记写!!!
        上一篇博客我说过,paint方法被系统调用的条件,其中重绘就会被自动调用,所以说当我们每次按完键盘按键的时候都需要再次调用一下画板重绘的操作,这样才能看到坦克动态移动的效果,如果没有这个重绘的方法调用,是没有办法看到动态效果的,只会看到坦克再原地不停的旋转
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

  • 🕵️‍♀️🕵️‍♀️🕵️‍♀️最后一点不要忘记,要把 这个事件监听机制添加到我们的框架中,因为我们所做的一切都是基于JFrame框架实现的,所以在Tank的构造方法中要加上事件监听机制 才能生效
    public TankGame03() {
        mp=new Mypanel();
        this.add(mp);
        	🚕🚕🚕
        this.addKeyListener(mp);//在框架中添加事件监听机制
       		 🚓🚓🚓
        this.setSize(1030,810);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_x_330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值