飞机小游戏

******************************************************************************
java 小游戏练习

awt和swing是Java中常见的GUI(图形用户界面)技术,平时用到很少,多用html,
awt是Java中最老的gui技术。此处只用于画出基本窗口和图形加载。

写这个窗口首先要继承一个JFrame类,(import javax.swing.JFrame),然后调用它里
面的方法。

eclipse提示快捷键:alt+?

paint方法
如果要在窗口中画图,或者要显示什么内容,我们需要重写paint(Graphics g)这个方法
,他会被系统自动调用,我们自己不需要调用这个方法。

Graphics 的对象g,我们可以把它想象成一支画笔,窗口中的图形都由这只画笔画出。

首先写一个image的工具类,里面有加载图片的方法,然后建一个图片的包,放图片。

ImageIo实现图片加载技术是什么?
多线程和内部类实现动画效果。

定义一个内部类,在一个类里面。可以使用它的方法和属性。。

Thread.sleep(40);//每40ms停一下,即每秒播放25张图片。
//1s=1000ms,60s=1min=60000ms,
//动画标准:1s播放24帧(24张图画组成1秒)电视标准:1s播放25帧

//6启动重画窗口的线程
new paintThread().start();线程里面有
重画的方法。
        
每次调用窗口,窗口里面的线程都会调用重画图片的方法。

**********************************************************************************************************************************************

package cn.game2;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
/**
 * 飞机游戏的主窗口
 * @author Administrator
 *
 */
public class MyGameFrame extends JFrame {

    //3定义一个图片
    Image bg=GameUtil.getImage("images/bg.jpg");
    Image plane=GameUtil.getImage("images/plane.png");
    
    int x=250,y=250;
    
    
    
    /*
     *2 paint 方法自动被调用,
     * g相当于一支画笔
     */
    @Override
    public void paint(Graphics g) {
        //super.paint(g);//此处造成图片每次闪退状态
    
        
        //3创建一个util类来加载图片,建一个图片包,paint画里面的图片
        
        g.drawImage(bg, 0, 0, null);//先画背景
        g.drawImage(plane, x, y, null);//再画飞机
        x++;
        
        
    }
    
    
    //4写一个内部类。可以使用它所在类里面的方法
    class paintThread extends Thread{
        
        //5然后重写它继承的Thread类里面的run方法
        @Override
        public void run() {
            while(true){
                repaint();
                //此repaint()方法是class MyGameFrame的方法
                try {
                    Thread.sleep(40);//每40ms停一下,即每秒播放25张图片。
                    //1s=1000ms,60s=1min=60000ms,
                    //动画标准:1s播放24帧(24张图画组成1秒)电视标准:1s播放25帧
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
                
            }
        }
    }
    
    
    
    /*
     * 1初始化窗口
     */
    
    public void lanchFrame(){
        setTitle("gamegame");
        setVisible(true);
        this.setSize(500, 500);
        this.setLocation(300, 200);
        /*
         * 关闭创建的游戏窗口是一个假关闭,程序的执行并没有被关闭,要解决这个问题,
         * 用匿名内部类
         * 
         */
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);//0表示正常结束,负数的话表示有些异常结束。
            }
        });
        
        //6启动重画窗口的线程
        new paintThread().start();
        
    }
    public static void main(String[] args){
        MyGameFrame frame=new MyGameFrame();
        frame.lanchFrame();
                
    }
    
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值