飞机大战——写游戏时注意的一些细节

项目链接

github

项目截图

在这里插入图片描述
在这里插入图片描述

常量类

可以将程序中一些用到的常量,如窗口大小,单独写在一个类中(constant),再用到的时候可以直接调用,方便修改。

package flyGame;

public class constant {
	public static final int ShellNum = 25;
	public static final int planeX = 150,planeY = 560;
	public static final int planeWidth = 100,planeHeight = 124;
	public static final int winWidth = 400,winHeight = 700;
}

关于画笔

Frame类中的paint函数自动调用,函数自带一个画笔,画笔可以画圆,矩形,字符串,图片等,在改变画笔颜色时,要记得先将画笔原先的颜色保存下来,用完后再改回去,同理,画笔的字体等属性也是。

双缓冲技术解决窗口闪烁

再Frame窗口绘制图形的时候,窗口会有很严重的闪烁,其原因是,程序再绘制图形的时候,先将图形加载到图形缓冲区,图形缓冲区再绘制到窗口上,因为是缓冲区是加载一个便绘制一个,所以窗口上的图形并不是同时绘制的,因此会看到窗口白色的背景,由此导致闪烁。
双缓冲技术是再图像缓冲区之外,再添加一个缓冲区,程序先将图像加载到这个缓冲区中,等同一时刻窗口中的全部图像加载完成后,再复制到图形缓冲区,最后绘制到窗口上,因次,用双缓冲技术,不会出现闪烁问题,即使性能很差,也只会出现图像卡顿。

/*
	 * 双缓冲技术解决窗口闪烁
	 */
	private Image offScreenImage = null;
	
	public void update(Graphics g) {
		if(offScreenImage == null) 
			offScreenImage = this.createImage(constant.winWidth,constant.winHeight);//游戏窗口宽度和高度
		Graphics goff = offScreenImage.getGraphics();
		paint(goff);
		g.drawImage(offScreenImage, 0, 0, null);
	}
	

矩形碰撞检测

矩形类里面有矩形碰撞检测的函数(当初第一次写游戏的时候自己动手写的,要累死)。
在GameObject类(游戏物体类,飞机类,炮弹类继承它)中添加返回物体矩形的函数,方便用来检测物体间是否发生碰撞。

 public boolean intersects(Rectangle r) {
        int tw = this.width;
        int th = this.height;
        int rw = r.width;
        int rh = r.height;
        if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
            return false;
        }
        int tx = this.x;
        int ty = this.y;
        int rx = r.x;
        int ry = r.y;
        rw += rx;
        rh += ry;
        tw += tx;
        th += ty;
        //      overflow || intersect
        return ((rw < rx || rw > tx) &&
                (rh < ry || rh > ty) &&
                (tw < tx || tw > rx) &&
                (th < ty || th > ry));
    }

图片轮播

飞机死亡时爆炸效果是用16中图片轮播做的,当判定飞机爆炸时,调用爆炸类的draw函数即可实现。

int count;
	public void draw(Graphics g) {
		if(count <= 15) {
			g.drawImage(imgs[count], (int)x, (int)y, null);
			count++;
		}
	}

项目的构建

java老师一直强调java是面向对象的,所以如何将项目中的对象抽象出来是一个很重要的问题,例如在飞机大战项目中,所有类的父类GameObject类,以及子类plane,shell,还有工具类GameUtil,constant.
这个是要在项目中不断的练习的,只有在不断的练习中,才能体会出项目如何构建是合适的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值