(也可以用新的方法,但是不做过多介绍)
代码实现上是设置一个空变量
为改变量写一个方法
相当于在内存中先画一个窗口图片进行缓存
//继承的类要改成Frame /* 为这个属性写一个方法 实现逻辑: 进行if条件判断 将变量设置为空,如果是空的就创建窗口值赋予变量---类.属性 再将属性的get方法赋予Graphics画笔对象 画出对象 */ public void update(Graphics g){ if (offScreenImage == null){ offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT); }else { System.out.printf("Error"); } /*再将属性的get方法赋予Graphics画笔对象*/ Graphics gOff = offScreenImage.getGraphics(); paint(gOff); /*画出对象*/ g.drawImage(offScreenImage,0,0,null); }
Java中物体交互原理就是矩形检测原理:
游戏中的物体抽象成矩形---无论是圆还是其他图形
判断矩形是否相交即可
多边形可以抽象分解成多个矩形然后继续进行矩形检测
Java的API中提供了Rectangle类来表示矩形相关信息
提供了intersects()方法,直接判断矩形是否相交
每画一次炮弹就跟飞机进行比较
注意:
要定义飞机的宽度和高度
要定义炮弹的宽度和高度
定义属性让飞机死掉
定义飞机的宽度和高度:
/*重写构造器*/ public Plane(Image img, double x, double y){ this.img = img; this.x = x; this.y = y; this.speed = 300; this.width = img.getWidth(null); this.height = img.getHeight(null); }
定义炮弹的宽度和高度:
/*构造方法构造一个随机数*/ public Shell(){ x = 200; //这里的x,y继承了GameObject类,所以是double类型的数 y = 200; //所以下面用到x,y的时候要进行强制转型 width = 10; height = 10; speed = 3; /*希望是一个随机的值,希望生成随机角度*/ degree = Math.random() * Math.PI * 2; }
定义属性让飞机死掉:
//利用遍历的方法画出50发炮弹 for (int i =0; i < shells.length; i++){ shells[i].draw(g); /*判断炮弹矩形是否与飞机矩形相碰*/ boolean peng = shells[i].getRect().intersects(p.getRect()); //getRect是获得矩形,设置变量是否了好进行if判断 /*进行if判断是否相碰,飞机和炮弹的碰撞检测*/ if (peng){ // System.out.println("碰到了!!!"); p.live = false; //相碰死掉 } } }