13.2-全棧Java筆記:打飛機遊戲實戰項目|Graphics|ImageIO|GameUtil
上節我們講到如何在遊戲項目中運用AWT技術繪制遊戲窗口,本節我們繼續往下講~~
圖形和文本繪制1)paint方法
如果要在窗口中畫圖或者顯示什麽內容,我們需要重寫paint(Graphics g)方法。 這個方法的作用是:畫出整個窗口及其內部內容。它會被系統自動調用。我們自己不需要去調用這個方法。
【示例1】paint方法介紹
@Override public void paint(Graphics g) { //paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。
} |
2)Graphics畫筆對象_畫圖形
Graphics對象,我們可以把它想象成“一支畫筆”,窗口中的圖形都由這支“畫筆”畫出來的。
畫出每個圖形都需要指定圖形所在“矩形區域”的位置和大小。比如繪制橢圓。
g.drawOval(100, 50, 300, 300); 實際上,就是根據橢圓所在的外切矩形來確定橢圓的基本信息。
上面4個參數指的是橢圓外切矩形:左上角頂點(100px,50px),寬度300px,高度300px。
【示例2】使用paint方法畫圖形
//paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。 @Override public void paint(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類:加載圖片代碼
package cn.sxt.game;
import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO;
public class GameUtil { // 工具類最好將構造器私有化。 private GameUtil() {
}
public static Image getImage(String path) { BufferedImage bi = null; try { URL u = GameUtil.class.getClassLoader().getResource(path); bi = ImageIO.read(u); } catch (IOException e) { e.printStackTrace(); } return bi; } } |
註:
a. GameUtil.class.getClassLoader().getResource(path);可以幫助我們獲得程序運行類加載器,加載資源的根目錄,從而獲得相對資源位置。
b. ImageIO.read()方法是核心方法,幫助我們讀取圖片信息,並返回Image對象。
2) 加載遊戲背景圖片和飛機圖片
我們將實現準備好的圖片放到src/images下面,然後,開始讀取這些圖片,並顯示在窗口中。
【示例4】MyGameFrame類:加載圖片並增加paint方法
//將背景圖片與飛機圖片定義為成員變量 Image bgImg = GameUtil.getImage("images/bg.jpg"); Image planeImg = GameUtil.getImage("images/plane.png");
//paint方法作用是:畫出整個窗口及內部內容。被系統自動調用。 @Override public void paint(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
13.2-全棧Java筆記:打飛機遊戲實戰項目|Graphics|ImageIO|GameUtil