1. 程式人生 > >13.2-全棧Java筆記:打飛機遊戲實戰項目|Graphics|ImageIO|GameUtil

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