上節我們講到如何在游戲項目中運用AWT技術繪制游戲窗口,本節我們繼續往下講~~
圖形和文本繪制
1)paint方法
如果要在窗口中畫圖或者顯示什么內容,我們需要重寫paint(Graphics g)方法。 這個方法的作用是:畫出整個窗口及其內部內容。它會被系統自動調用。我們自己不需要去調用這個方法。
【示例1】paint方法介紹
@Override
publicvoidpaint(Graphics g) {
//paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。
}
2)Graphics畫筆對象_畫圖形
Graphics對象,我們可以把它想象成“一支畫筆”,窗口中的圖形都由這支“畫筆”畫出來的。
畫出每個圖形都需要指定圖形所在“矩形區域”的位置和大小。比如繪制橢圓。
g.drawOval(100, 50, 300, 300); 實際上,就是根據橢圓所在的外切矩形來確定橢圓的基本信息。
上面4個參數指的是橢圓外切矩形:左上角頂點(100px,50px),寬度300px,高度300px。
【示例2】使用paint方法畫圖形
//paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。
@Override
publicvoidpaint(Graphics g) {
//從坐標點(100,50)到(400,400)畫出直線
g.drawLine(100, 50, 400, ? 400);
//畫出矩形。矩形左上角頂點坐標(100,50),寬度300,高度300
g.drawRect(100, 50, 300, ? 300);
//畫出橢圓。橢圓外切矩形為:左上角頂點(100,50),寬度300,高度300
g.drawOval(100, 50, 300, ? 300);
}
ImageIO實現圖片加載技術
游戲開發中,圖片加載是最常見的技術。我們在此處使用ImageIO類實現圖片加載,并且為了代碼的復用,將圖片加載的方法封裝到GameUtil工具類中,便于我們以后直接調用。
我們要先將項目用到的圖片拷貝到項目的src下面,我們可以建立新的文件夾images存放所有圖片,本節課項目結構如下:
1)GameUtil工具類
我們可以將一些輔助性的工具方法通通放到GameUtil中,便于重復調用。
【示例3】GameUtil類:加載圖片代碼
packagecn.sxt.game;
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.net.URL;
importjavax.imageio.ImageIO;
publicclassGameUtil {
//工具類最好將構造器私有化。
privateGameUtil() {
}
publicstaticImage getImage(Stringpath) {
BufferedImagebi=null;
try{
URLu= GameUtil.class.getClassLoader().getResource(path);
bi= ImageIO.read(u);
}catch(IOExceptione) {
e.printStackTrace();
}
returnbi;
}
}
注:
a.?GameUtil.class.getClassLoader().getResource(path);可以幫助我們獲得程序運行類加載器,加載資源的根目錄,從而獲得相對資源位置。
b.?ImageIO.read()方法是核心方法,幫助我們讀取圖片信息,并返回Image對象。
2) 加載游戲背景圖片和飛機圖片
我們將實現準備好的圖片放到src/images下面,然后,開始讀取這些圖片,并顯示在窗口中。
【示例4】MyGameFrame類:加載圖片并增加paint方法
//將背景圖片與飛機圖片定義為成員變量
ImagebgImg= GameUtil.getImage("images/bg.jpg");
ImageplaneImg= GameUtil.getImage("images/plane.png");
//paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。
@Override
publicvoidpaint(Graphics g) {
g.drawImage(bgImg, 0, 0,null);
g.drawImage(planeImg, 200, 200,null);
}
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop