******************************************************************************
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();
}
}