关于java:我所知道坦克大战单机版之画出坦克的实心圆让圆动起来

33次阅读

共计 1254 个字符,预计需要花费 4 分钟才能阅读完成。

本篇文章目标


  • 画出坦克的实心圆
  • 让坦克圆动起来

一、画出代表坦克的实心圆

咱们须要画出一个圆,那么能够应用 fillOval 办法

fillOval(int x,int y ,int width ,int  height)

参数的 X 和 Y 是矩形框的左上角的坐标,width 和 height 是宽和高。

而咱们重写 paint 办法进行画出坦克的圆

@Override
public void paint(Graphics g) {

    // 获取默认的色彩 Color
    Color c = g.getColor();
    // 将坦克色彩为红色
    g.setColor(Color.red);
    // 画一个圆
    g.fillOval(50,50,30,30);
    // 将原色彩填充回
    g.setColor(c);
}

当然也能够在 lauchFrame 办法里增加背景填充色,显得更外显眼一些

// 增加设置背景色彩
this.setBackground(Color.GREEN);

二、让坦克动起来

咱们应用 fillOval 办法画出了圆的实现,那么怎么让这个圆扭转地位?

// 画一个圆
g.fillOval(50,50,30,30);

咱们发现 x 和 y 的做标都是 50,他们是固定的!

若扭转成变量的形式?是不是也是一样能够呢?

int x = 50;// 坦克的 x 坐标

int y = 50;// 坦克的 y 坐标


@Override
public void paint(Graphics g) {

    // 获取默认的色彩 Color
    Color c = g.getColor();
    // 将坦克色彩为红色
    g.setColor(Color.red);
    // 画一个圆
    g.fillOval(x,y,30,30);
    // 将原色彩填充回
    g.setColor(c);
}

若咱们每次原有的根底上进行改变,是不是就动起来了?

咱们采纳 repaint 重绘办法,每隔多少毫秒刷新最新的圆点信息坐标

private class PaintThread implements Runnable {
    @Override
    public void run() {while (true) {repaint();// 重绘办法
            try {Thread.sleep(100);
            } catch (InterruptedException e) {e.printStackTrace();
            }
        }
    }
}
// 定义窗口办法
public void lauchFrame() {
    
    // 省略其余关键性代码.....

    // 增加设置背景色彩
    this.setBackground(Color.GREEN);

    // 应用线程重绘最新圆点信息坐标
    new Thread(new PaintThread()).start();}

@Override
public void paint(Graphics g) {

    // 省略其余关键性代码.....
    
    // 刷新圆点地位
    x += 5;// x 坐标
    y += 5;// y 坐标
}

这时咱们在 main 办法运行起来就发现每个 100 毫秒就会挪动圆点地位了

为什么应用线程重面,而不是每按下一个键进行一次重画?

  • 线程重画更平均,更能管制重画的速度。
  • 按键重画不能解决子弹主动航行的问题。

参考资料


尚学堂:坦克大战(马士兵老师)

正文完
 0