飞机大战(准备)

要做飞机大战可能需要使用的类,先来做个简单的介绍。

1.首先不用多说,这种窗口游戏必须得有读图片的类
引入BufferedImage类和ImageIO类

import java.awt.image.BufferedImage
import javax.imageio.ImageIO;

设置成员变量

    public static BufferedImage backgroud;
    public static BufferedImage start;
    public static BufferedImage pause;
    public static BufferedImage gameover;
    public static BufferedImage airplane;
    public static BufferedImage bee;
    public static BufferedImage hero0;
    public static BufferedImage bullet;
    public static BufferedImage hero1;

读取图片

static{//初始化静态资源(图片)
        try{
                                backgroud=ImageIO.read(ShootGame.class.getResource("background.png"));
                        start=ImageIO.read(ShootGame.class.getResource("start.png"));
                        pause=ImageIO.read(ShootGame.class.getResource("pause.png"));
                        gameover=ImageIO.read(ShootGame.class.getResource("gameover.png"));
                        airplane=ImageIO.read(ShootGame.class.getResource("airplane.png"));
                        bee=ImageIO.read(ShootGame.class.getResource("bee.png"));
                        bullet=ImageIO.read(ShootGame.class.getResource("bullet.png"));
                        hero0=ImageIO.read(ShootGame.class.getResource("hero0.png"));
                        hero1=ImageIO.read(ShootGame.class.getResource("hero1.png"));
        }catch(Exception e){
            e.printStackTrace();
        }
    }

注意,此方法值能用于图片与代码在同一个包中

2.窗口和面板类

import javax.swing.JFrame;
import javax.swing.JPanel;

用相框来比喻这两个类,JFrame相当于相框的外围的那个框,JPanel相当于框里面的那个面板。
主程序类继承JPanel。在main函数中设置窗口和面板的属性

public static void main(String[] args) {
        JFrame frame=new JFrame("Fly");//窗口
        ShootGame game=new ShootGame();//面板
        frame.add(game);//将面板添加到窗口上
        frame.setSize(WIDTH,HEIGHT);//设置窗口的宽高
        frame.setAlwaysOnTop(true);//设置一直在最上面
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置按窗口右上角的X退出
        frame.setLocationRelativeTo(null);//设置窗口居中显示
        frame.setVisible(true);//1.设置窗口可见2.尽快调用paint()方法

    }

3.paint方法
paint()方法的两种调用方式 1.fram.setVisible(true); 2.repaint()
paint()方法传的参数是画笔类(Graphics)
用paint方法画背景图

public  void paint(Graphics g){
        g.drawImage(backgroud,0,0,null);

    } 

g.drawImage((图片名称),(y坐标),(y坐标),(缩放,转换 图像时需要通知的对象))
设置画笔颜色字体

g.setColor(new Color(0xFF0000));
g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,24));

解释第一句,setcolor()方法中传入的是一个color对象,颜色是同过16进制表示的。0x表示的十六进制,后面每两位表示一种颜色,分别是计算机的三种原色(红,蓝,绿),00-FF表示那种颜色的程度。0xFF0000的颜色就是红色
第二句,方法传入的是Font对象,构造器里的参数为 (String 字体,int 风格,int 字号).Font.SANS_SERIF为黑体,Font.BOLD为粗体。
4.定时器
导入包

import java.util.Timer;//定时
import java.util.TimerTask;//定时做的事

示例代码:

import java.util.Timer;

    public class TimerRunner {

        public static void main(String [] args){
            Timer timer=new Timer();
            timer.schedule(new MyTimerTask(),1000,100);
        }

   }

    import java.util.TimerTask;

    public class MyTimerTask extends TimerTask {

        @Override
        public void run() {
            System.out.println("11");

       }

解释一下timer.schedule()方法
第一个参数,是 TimerTask 类,在包:import Java.util.TimerTask .使用者要继承该类,并实现public void run() 方法,因为 TimerTask 类 实现了 Runnable 接口。
第二个参数的意思是,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行run() 方法。
第三个参数的意思就是,第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法。

5.鼠标监听器

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

监听鼠标事件MouseEvent。
鼠标监听器MouseListener,用于接收鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)
旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。
MouseListener是一个接口,里面的方法都是抽象的,需要你去实现。
MouseAdapter是一个类,它实现了MouseListener,但是方法主体是空的,主要是方便编程人员。
使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将MouseEvent 传递给该方法。

其包含五个方法:

1.public void mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。

2.public void mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。

3.public void mouseExited(MouseEvent e) 鼠标离开组件时调用。

4.public void mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。

5.public void mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。

实例代码

    //创建鼠标侦听器
        MouseAdapter l=new MouseAdapter(){
            public void mouseMoved(MouseEvent e){//英雄机随着鼠标动
                    int x=e.getX();
                    int y=e.getY();
                    hero.moveTo(x, y);

            }
            //重写鼠标点击事件
            //如果当前状态为开始状态,鼠标点击后变为运行状态
            //如果当前状态为结束状态,鼠标点击后变为开始状态并清空缓存
            public void mouseClicked(MouseEvent e){
                switch(stata){
                case START:
                    stata=RUNING;
                    break;
                case GAME_OVER:
                    hero=new Hero();
                    bullets=new Bullet[0];
                    flyings=new FlyObject[0];
                    stata=START;
                    break;
                }
            }
        public void mouseExited(MouseEvent e){//重写鼠标移开事件,鼠标移开变成暂停状态 
                if(stata==RUNING){
                    stata=PAUSH;
                }
            }
            public void mouseEntered(MouseEvent e){//重写鼠标进入时间
                if(stata==PAUSH){
                    stata=RUNING;
                }
            }
        }; 
        this.addMouseListener(l);//处理鼠标的操作事件
        this.addMouseMotionListener(l);//处理鼠标的滑动事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值