飞机大战2.0

任务:绘制游戏面板的图片背景。

上一次是在游戏面板上绘制了一个椭圆,现在,不要椭圆了,要你在面板上画一幅图片。

 

在eclipse中java project下见一个文件夹,图片放进来。

使用Graphics的drawImage(Image  img, int x , int y, int width,  int height,  ImageObserver observer);

用到的第一个参数是Image类型的。

Image类是一个抽象类,不能直接实例化。

如何得到这个类的上转型对象?

介绍3中常用的方法。

  1. 使用Toolkit类,是一个图形化的工具类

img  = Toolkit . getdefaultToolkit().getImage("images/bg.jpg");

  2.ImageIO 这是一个图像输入输出流,通过他的read()方法,读出一个图片文件中的Image对象。

img  = ImageIO.read(new File("images/bg.jpg"));

注意该方法会有异常。需要使用try-catch处理。

  3.使用一个ImageIcon类的getImage()方法

img = new ImageIcon("images/bg.jpg").getImage();

总结:要在一个面板中画一幅图片:

  1. 在类体中,定义Image的成员变量

Image img;

  2.在构造方法中将该成员变量初始化(产生对象)

参考上面的3种方法。

  3 .在重写的paint()方法中,利用画笔(Graphics)g,调用darwImage()方法,把img对象传进去。

g,.drawImage(img,  0,  0,  GameData.width ,  GameData. height) ;

(1)GamePanel类

package dsj;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
//继承于面板类JPanel
public class GamePanel extends JPanel {
    Image img ;
    
    //在构造方法中,初始化这个游戏的面板
    public GamePanel() {
        //设置面板的大小
        //this.setSize(GameData.WIDTH, GameData.HEIGHT);
        this.setPreferredSize(new Dimension(GameData.GameWidth, GameData.GameHeight));
        //设置面板的颜色
        this.setBackground(Color.CYAN);
        //构造方法中初始化这个图片对象
        //第1中方法
//        img =  Toolkit.getDefaultToolkit().getImage("images/bg.jpg");
        //第2中方法
//        try {
//            img  = ImageIO.read(new File("images/bg.jpg"));
//        } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
        //第3种方法
        img = new ImageIcon("images/background.png").getImage();
    }
    //面板本身是怎样绘制出来的?
    //是从父类集成的一个叫做paint()的方法干的。如果想在面板上绘制其他的内容,
    //就要重写这个方法。
    @Override
    public void paint(Graphics g) {
        // 重写的方法的第一条语句会默认的调用父类的这个方法。
        super.paint(g);
        //画一个椭圆
        //g.drawOval(0, 0, GameData.WIDTH, GameData.HEIGHT);        
        //绘制一幅图片作为游戏面板的背景
        g.drawImage(img, 0, 0, GameData.GameWidth, GameData.GameHeight, null);
    }
}

(2)、GameWindow类

package dsj;

import javax.swing.JFrame;

public class GameWindow extends JFrame{
    //一个窗口中包含了一个面板,这个面板是窗口对象的成员变量
    GamePanel gamePanel ;
    
    //写窗口类的构造方法,初始化窗口对象。
    public GameWindow() {
        this.init();
    }    
    //初识化窗口的方法。
    public  void init() {
        //设置窗口对象的大小
        this.setSize(GameData.GameWidth ,GameData.GameHeight);
        //设置窗口大小的可调整性为不可调
        this.setResizable(false);
//        //设置窗口的位置在屏幕的中间
        this.setLocationRelativeTo(null);
////        this.setLocation(600, 200);        
////        this.setSize(GameData.WIDTH , GameData.HEIGHT);
        //设置游戏窗口的标题栏
        this.setTitle("飞机大战");
        //设置窗口对象的可见性
        this.setVisible(true);    //        
//        //产生游戏面板的对象
        gamePanel = new GamePanel();
//        //把游戏面板的对象添加到窗口中
        this.add(gamePanel);
//        //设置窗口的大小根据内部的面板大小自适应
        this.pack();
    }
}

 

posted @ 2020-06-20 06:42  贫僧敲代码  阅读(131)  评论(0)    收藏  举报