JAVA入门到精通-第34讲-绘图技术-坦克大战2
椭圆的X/Y轴在左上角;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180057165-1776453422.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180057459-1949935873.png)
Toolkit是一个类;
用Panel里面的getResource方法把图片加载到Toolkit里面;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180057723-595039478.png)
dx1/2图片左上角;
dy1/dy2图片的宽高;
this表示JPanel本身;表示把图片画到JPanel上;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180057980-341781749.png)
str画出什么东西;
x ,y 出现的位置;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180058204-1538717752.png)
Font有三个参数:“字体”,“字体粗体还是斜体”,“字体的大小”
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180058472-2030364832.png)
一般不会用现成图片,耗费资源比较大;
class Tank
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180058800-1111913781.png)
坦克下面有各种各样的坦克,先抽象出来一个父类;
用父类的构造函数初始化子类的对象;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180059076-702015294.png)
坦克的活动区域在JPanel上;
将来的坦克是生活在Panel区域里面的;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180059694-1645973755.png)
可以认为,坦克是一个Panel的成员变量的;
一个类里面是可以有引用类型的;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180059927-2105009087.png)
以左上角的参照点来计算;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180101127-359803971.png)
X/Y轴坐标从hero中取得;
g.fill填充的 颜色;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180102816-1612183326.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180103598-1367824464.png)
把整个代码进行封装-画出坦克的函数:敌人的函数、我的函数
:横坐标X,纵坐标Y,画笔g,方向,坦克的类型;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180104336-1198462562.png)
switch判断什么类型的坦克,敌人的坦克?我的坦克?
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180105100-14852658.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180106060-737069063.png)
这样画不同的坦克,一次就搞定了;
/画图Graphics画图类--画图片--画字[Window015.java]
xxxxxxxxxx
40
1
import java.awt.*;
2
import javax.swing.*;
3
public class Window015 extends JFrame{
4
//定义组件
5
MyPanel1 mp=null;
6
public static void main(String[] args) {
7
Window015 th=new Window015();
8
}
9
public Window015(){
10
//构建组件
11
mp=new MyPanel1();
12
//加入组件
13
this.add(mp);
14
//设置窗体
15
this.setSize(400, 300);
16
this.setLocationRelativeTo(null);
17
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18
this.setVisible(true);
19
}
20
}
21
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
22
class MyPanel1 extends JPanel{
23
//重写(覆盖)JPanel的paint方法
24
public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔
25
//1、调用父类函数,完成初始化任务
26
super.paint(g);
27
//在面板上画出图片
28
Image im=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/F22.jpg"));
29
//实现
30
g.drawImage(im, 0, 0, 300, 200, this);
31
32
//如何画出字
33
g.setColor(Color.red);
34
g.setFont(new Font("黑体",Font.BOLD,40));
35
g.drawString("祖国万岁", 100, 100);
36
//画弧形
37
g.drawArc(100, 100, 120, 200, -50, -100);
38
}
39
}
40
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130180106952-229245884.png)
x
1
package com.guiTest.www.model;
2
import java.awt.*;
3
import javax.swing.*;
4
public class MyTank01 extends JFrame
5
{
6
//定义组件
7
MyPanel mp=null;
8
public static void main(String[] args) {
9
// TODO Auto-generated method stub
10
MyTank01 mt=new MyTank01();
11
}
12
13
14
15
//构造函数
16
public MyTank01(){
17
//构建组件
18
mp=new MyPanel();
19
20
//加入组件
21
this.add(mp);
22
23
//设置JFrame窗体
24
this.setTitle("坦克大战");//JFrame标题
25
this.setSize(400, 300);//JFrame窗体大小
26
this.setLocationRelativeTo(null);//在屏幕中心显示
27
this.setVisible(true);//显示
28
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame
29
30
}
31
}
32
//我的面板Panel
33
class MyPanel extends JPanel{
34
//定义一个我的坦克
35
Hero hero=null;
36
37
//构造函数
38
public MyPanel(){
39
hero=new Hero(10,10);//我的坦克初始位置
40
}
41
42
//重写paint函数
43
public void paint(Graphics g){
44
super.paint(g);//调用父类paint方法
45
//设置Panel底色
46
g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域
47
//调用坦克
48
this.drawTank(hero.getX(), hero.getY(), g, 0, 1);
49
50
}
51
52
//画出坦克的函数
53
public void drawTank(int x,int y,Graphics g,int direct,int type){
54
//判断是什么类型的坦克
55
switch(type){
56
case 0:
57
g.setColor(Color.cyan);//我的坦克颜色
58
break;
59
case 1:
60
g.setColor(Color.yellow);//敌人坦克颜色
61
break;
62
}
63
64
//判断坦克的方向
65
switch(direct){
66
//向上走
67
case 0:
68
//画出我的坦克(到时再封装成一个函数)
69
//1、画出左边的矩形
70
g.fill3DRect(x, y, 5, 30, false);
71
//2、画出右边的矩形
72
g.fill3DRect(x+15, y, 5, 30, false);
73
//3、画出中间矩形
74
g.fill3DRect(x+5, y+5, 10, 20, false);
75
//4、画出中间圆形
76
g.fillOval(x+5, y+10, 10, 10);
77
//5、画出线(炮筒)
78
g.drawLine(x+10, y+15, x+10, y);
79
break;
80
}
81
}
82
83
}
84
85
//定义坦克类
86
class Tank{
87
//表示坦克的X横坐标Y纵坐标
88
int x=0,y=0;
89
90
public Tank(int x,int y){
91
this.x=x;
92
this.y=y;
93
}
94
95
public int getX() {
96
return x;
97
}
98
public void setX(int x) {
99
this.x = x;
100
}
101
public int getY() {
102
return y;
103
}
104
public void setY(int y) {
105
this.y = y;
106
}
107
}
108
109
//我的坦克
110
class Hero extends Tank{
111
public Hero(int x,int y){
112
super(x,y);
113
}
114
}
1、public构造函数-构造JFrame;
2、class MyPanel 构造面板
3、class Tank 构造坦克
4、class Hero extends Tank 构造“我的坦克”