飞机大战2.0
任务:绘制游戏面板的图片背景。
上一次是在游戏面板上绘制了一个椭圆,现在,不要椭圆了,要你在面板上画一幅图片。
在eclipse中java project下见一个文件夹,图片放进来。
使用Graphics的drawImage(Image img, int x , int y, int width, int height, ImageObserver observer);
用到的第一个参数是Image类型的。
Image类是一个抽象类,不能直接实例化。
如何得到这个类的上转型对象?
介绍3中常用的方法。
- 使用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();
总结:要在一个面板中画一幅图片:
- 在类体中,定义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(); } }

浙公网安备 33010602011771号