JAVA入門到精通-第34講-繪圖技術-坦克大戰2
阿新 • • 發佈:2018-11-30
橢圓的X/Y軸在左上角;
Toolkit是一個類;
用Panel裡面的getResource方法把圖片載入到Toolkit裡面;
dx1/2圖片左上角; dy1/dy2圖片的寬高; this表示JPanel本身;表示把圖片畫到JPanel上; str畫出什麼東西; x ,y 出現的位置; Font有三個引數:“字型”,“字型粗體還是斜體”,“字型的大小” 一般不會用現成圖片,耗費資源比較大; class Tank 坦克下面有各種各樣的坦克,先抽象出來一個父類;
用父類的建構函式初始化子類的物件;
坦克的活動區域在JPanel上; 將來的坦克是生活在Panel區域裡面的;
可以認為,坦克是一個Panel的成員變數的; 一個類裡面是可以有引用型別的;
以左上角的參照點來計算; X/Y軸座標從hero中取得; g.fill填充的 顏色; 把整個程式碼進行封裝-畫出坦克的函式:敵人的函式、我的函式 :橫座標X,縱座標Y,畫筆g,方向,坦克的型別;
switch判斷什麼型別的坦克,敵人的坦克?我的坦克?
這樣畫不同的坦克,一次就搞定了;
/畫圖Graphics畫圖類--畫圖片--畫字[Window015.java]
x 1
1、public建構函式-構造JFrame; 2、class MyPanel 構造面板 3、class Tank 構造坦克 4、class Hero extends Tank 構造“我的坦克”
來自為知筆記(Wiz)
dx1/2圖片左上角; dy1/dy2圖片的寬高; this表示JPanel本身;表示把圖片畫到JPanel上; str畫出什麼東西; x ,y 出現的位置; Font有三個引數:“字型”,“字型粗體還是斜體”,“字型的大小” 一般不會用現成圖片,耗費資源比較大; class Tank 坦克下面有各種各樣的坦克,先抽象出來一個父類;
用父類的建構函式初始化子類的物件;
坦克的活動區域在JPanel上; 將來的坦克是生活在Panel區域裡面的;
可以認為,坦克是一個Panel的成員變數的; 一個類裡面是可以有引用型別的;
以左上角的參照點來計算; X/Y軸座標從hero中取得; g.fill填充的 顏色; 把整個程式碼進行封裝-畫出坦克的函式:敵人的函式、我的函式 :橫座標X,縱座標Y,畫筆g,方向,坦克的型別;
/畫圖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
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 構造“我的坦克”
來自為知筆記(Wiz)