13.2-全棧Java筆記:打飛機游戲實戰項目|Graphics|ImageIO|GameUtil

上節我們講到如何在游戲項目中運用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);

}

示例1執行效果圖


ImageIO實現圖片加載技術

游戲開發中,圖片加載是最常見的技術。我們在此處使用ImageIO類實現圖片加載,并且為了代碼的復用,將圖片加載的方法封裝到GameUtil工具類中,便于我們以后直接調用。

我們要先將項目用到的圖片拷貝到項目的src下面,我們可以建立新的文件夾images存放所有圖片,本節課項目結構如下:

2 MyGame0.3項目結構圖


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);

}

示例4 執行結果圖


「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。

筆記包含從淺入深的六大部分:

A-Java入門階段

B-數據庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰

E-Java高級框架精解

F-Linux和Hadoop

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容