java

java小游戏

2020-03-22  本文已影响0人  心跳小鹿_3a43

做游戏(飞机大战笔记)

第一步:.先创建一个游戏类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()

然后画出生存时间。

上一篇 下一篇

猜你喜欢

热点阅读