做游戏(飞机大战笔记)
第一步:.先创建一个游戏类MyGameFrame 并继承JFrame (需要import javax.swing.JFrame;) 继承extends
第二步:初始化窗口 launchFrame
this.setTitle(“窗口标题”)
this.setVisible(true) 窗口关闭
this.setSize(x,y)窗口大小
this.setLLocation(x,y) 窗口位置
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); 关闭窗口后台还继续运行需要用此事件关闭
(import java.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
)
第三步: 在主方法里面创建对象并调用 例:MyGameFrame f=new MyGameFrame();
f.launchFrame();
第四步:窗口里画图形 paint(Graphicsg)
先获取颜色:Color c=g.getColor();
在最后把颜色改回去:g.setColor(c);
先获取字体:Font f=g.getFont();
在最后把字体改回去:f.Setfont(f)
给图形加颜色:g.setColor(Color.颜色大写)
画线:g.drawLine(x1,y1,x2,y2)
画椭圆:g.drawOval(x1,y1,长,宽) x1,y1是指圆的外切矩形的左上角的一点
画矩形:g.drawRect(x1,y1,长,宽)
画实心的矩形:g.fillRect(x1,y1,长,宽)
修改字体:g.setFont(new Font(“字体”,字体的样式加粗,倾斜..,字体大小))
写字:g.drawString(“字”,x1,y1)
x1 y1 都是距离窗口的点
第五步:设置游戏背景 先创建一个GameUtil类
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.print.DocFlavor.URL;
public class GameUtil {
//工具类最好将构造器私有化
private GameUtil(){}
public static ImagegetImage(String path) {
BufferedImagebi=null;
try{
java.net.URLu=GameUtil.class.getClassLoader().getResource(path);
bi=ImageIO.read(u);
}catch(IOExceptione){
e.printStackTrace();
}
return bi;
}
}
然后在MyGameFrame中Imageplane=GameUtil.getImage("images/plane.jpg");
在paint中画出来g.drawImage(plane, 0,
0, null);
第六步:画线程 在MyGameFrame中创建一个内部类PaintThread并继承Thread
//帮助我们反复重画窗口!
class PaintThread extendsThread{
@Override
public void run() {
while(true){
repaint();//重画
try {
Thread.sleep(40);//1s=1000ms
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
定义游戏物体移动的初始位置 在paint进行画图
然后在窗口类launchFrame中:new PaintThread().start();//启动重画窗口的线程
第七步:创建一个游戏物体的父类GameObiect
把物体的属性例如:img x y speed width height
再进行画物体public void drawself(Graphics g){
g.drawImage(img, (int)x,(int) y, null);
}
构造有参数的构造器:public GameObject(Image img, double x, double y, int speed, int width, int height) {
super();
this.img = img;
this.x = x;
this.y = y;
this.speed = speed;
this.width = width;
this.height = height;
}
第七步:创建一个飞机类并继承游戏物体父类:
画飞机的方法.并写出构造器;
在窗口类中写出飞机对象并在画笔方法中调用飞机类的方法;
第八步:在窗口类中定义键盘监听的内部类KeyMonitor并继承KeyAdapter
在类中右击source中的Overridezho添加按下抬起的方法并进行测试
每个按键有对应的数字
在初始化窗口中addKeyListener(new KeyMonitor()); //给窗口增加键盘监听
最后在KeyMonitor中调用按下和抬起的方法
第八步:解决闪烁问题
首先将游戏类MyGameFrame继承的JFrame改为Frame
在里面添加此代码
private Image offSreenImage=null;
public void update(Graphics g){
if(offSreenImage==null)
offSreenImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
GraphicsgOff=offSreenImage.getGraphics();
paint(gOff);
g.drawImage(offSreenImage,0,0,null);
}
第九步: 碰撞问题
物体都是矩形的
//飞机和炮弹的碰撞检测
boolean peng=shells[i].getRect().intersects(plane.getRect());
if(peng){
plane.live=false;
}
在此之前需要在飞机类中弄一个属性 boolean live=true;
并在画笔方法里if(live){
画出飞机
}
第十步:创建一个爆炸类
具体在看项目
第十一步 计时
先定义Date startTime=new Date();
DateendTime;
int period;//游戏的生存时间
然后在爆炸时创建endtime=new Date()
然后画出生存时间。
网友评论