需购买观看

全屏

13.2.6 GameObject类设计(0.5版)


【专业IT培训机构,真正零首付入学www.bjsxt.com


·GameObject类的定义

      我们发现,窗口中所有的对象(飞机、炮弹等等)都有很多共性:“图片对象、坐标位置、运行速度、宽度和高度”。为了方便程序开发,我们需要设计一个GameObject类,它可以作为所有游戏物体的父类,方便我们编程。

【示例13-11】GameObject类

package cn.sxt.game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;

public class GameObject {
	Image img;	//该物体对应的图片对象
	double x,y;	//该物体的坐标
	int speed;	//该物体的运行速度
	int width,height;	//该物体所在矩形区域的宽度和高度
	
    /**
	 * 怎么样绘制本对象
	 * @param g
	 */
	public void drawMySelf(Graphics  g){
		g.drawImage(img, (int)x, (int)y, null);
	}
	
	public GameObject(Image img, double x, double y) {
		this.img = img;
		this.x = x;
		this.y = y;
		if(img!=null){
			this.width = img.getWidth(null);
			this.height = img.getHeight(null);
		}
	}
	
	public GameObject(Image img, double x, double y, int speed, int width,
			int height) {
		this.img = img;
		this.x = x;
		this.y = y;
		this.speed = speed;
		this.width = width;
		this.height = height;
	}
	
	public GameObject() {
	}
	
	/**
	 * 返回物体对应矩形区域,便于后续在碰撞检测中使用
	 * @return
	 */
	public Rectangle getRect(){
		return  new Rectangle((int)x,(int) y, width, height);
	}	
}

·设计飞机类

      有了GameObject这个父类,我们设计飞机类特别简单,目前飞机类没有特别复杂的要求。我们只需简单的继承,即可使用:

【示例13-12】Plane类

package cn.sxt.game;

import java.awt.Graphics;
import java.awt.Image;

public class Plane  extends GameObject {
	@Override
	public void drawMySelf(Graphics g) {
		super.drawMySelf(g);
		this.x +=3;//飞机水平飞,我们也可以调整x、y算法,按照我们指定的路径飞行
	}
	
	public Plane(Image img, double x, double y) {
		super(img,x,y);
	}
}

      通过继承,我们发现实现新的类,爽了很多!

·MyGameFrame类调用方式的调整

      我们将Plane类封装后,也无需在MyGameFrame类中添加那么多飞机的属性,我们全部封装到了Plane类里面,因此,调用也变得更加简单。

【示例13-13】封装后的MyGameFrame类

public class MyGameFrame extends JFrame {
	Image bgImg = GameUtil.getImage("images/bg.jpg");
	Image planeImg = GameUtil.getImage("images/plane.png");
	Plane plane = new Plane(planeImg,300,300);
	
	//paint方法作用是:画出整个窗口及内部内容。被系统自动调用。
	@Override
	public void paint(Graphics g) {  
		g.drawImage(bgImg, 0, 0, null);
		plane.drawMySelf(g);	//画出飞机本身
	}	
	//其余代码,没有任何变化,不在附上,自行参考上一个版本。
}

      通过面向对象封装后,如果我们要再创建多个飞机,也变得异常简单。

【示例13-14】创建多个飞机

public class MyGameFrame extends JFrame {
	Image bgImg = GameUtil.getImage("images/bg.jpg");
	Image planeImg = GameUtil.getImage("images/plane.png");

	Plane plane = new Plane(planeImg,300,300);
	Plane plane2 = new Plane(planeImg,300,350);
	Plane plane3 = new Plane(planeImg,300,400);
	
	//paint方法作用是:画出整个窗口及内部内容。被系统自动调用。
	@Override
	public void paint(Graphics g) {  
		g.drawImage(bgImg, 0, 0, null);
		
		plane.drawMySelf(g);	//画出飞机本身
		plane2.drawMySelf(g);	//画出飞机本身
		plane3.drawMySelf(g);	//画出飞机本身
	}	
	//其余代码,和上个版本一致,为节省篇幅突出重点,不在附上。
}

      执行结果如图13-10所示:

图13-10 示例13-14的运行效果图.png

图13-10 示例13-14的运行效果图

分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183