飞机项目总结

一.MyFrame

public class MyFrame  extends Frame {
    
    /**
     * 加载窗口
     */
    public void launchFrame(){
        setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);
        setLocation(100, 100);
        setVisible(true);
        
        new PaintThread().start();  //启动重画线程
        
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    
    
    private Image offScreenImage = null;
    public void update(Graphics g) {
        if(offScreenImage == null)
            offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
        
        Graphics gOff = offScreenImage.getGraphics();

        paint(gOff);
        g.drawImage(offScreenImage, 0, 0, null);
    }
    
    /**
     * 定义一个重画窗口的线程类,是一个内部类
     * @author dell
     *
     */
    class PaintThread extends Thread {
        
        public void run(){
            while(true){
                repaint();//调用paint();
                try {
                    Thread.sleep(40); //1s = 1000ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }   
            }
        }
        
    }
}

二.游戏工具类 GameUtil

1.获得图片:

private GameUtil(){}  //工具类最好将构造器私有了。
	
	public static Image getImage(String path){
		BufferedImage bi=null;
		try {
			URL u = GameUtil.class.getClassLoader().getResource(path);
			bi = javax.imageio.ImageIO.read(u);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return bi;
	}

 URL u = GameUtil.class.getClassLoader().getResource(path);

类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

 bi = javax.imageio.ImageIO.read(u);

从资源定位中读取图片对象,然后就可以使用该图片资源

三.Constant

存放static final 常量

四.Star类

1.成员变量

1 Image img;
2     double x,y;
3     int width,height;

2.成员函数

1 public void draw(Graphics g){
2         g.drawImage(img, (int)x, (int)y, null);
3 }
4 //....
5 //一系列构造函数

五.Planet类继承于Star

1.成员变量

//除了图片,坐标。 行星沿着某个椭圆运行:长轴、短轴、速度、角度。 绕着某个Star飞。
    double longAxis;  //椭圆的长轴
    double shortAxis;  //椭圆的短轴
    double speed;     //飞行的速度
    double degree;    
    Star center;

2.成员函数

//画行星
public void draw(Graphics g){
        super.draw(g);
        move();
}
//画轨道
public void drawTrace(Graphics g){
        double ovalX,ovalY,ovalWidth,ovalHeight;
        
        ovalWidth = longAxis*2;
        ovalHeight = shortAxis*2;
        ovalX = (center.x+center.width/2)-longAxis;
        ovalY = (center.y+center.height/2)-shortAxis;
        
        Color c =g.getColor();
        g.setColor(Color.blue);
        g.drawOval((int)ovalX, (int)ovalY, (int)ovalWidth, (int)ovalHeight);
        g.setColor(c);
    }
//
public void move(){
        //沿着椭圆轨迹飞行
        x = (center.x+center.width/2) + longAxis*Math.cos(degree);
        y = (center.y+center.height/2)+ shortAxis*Math.sin(degree);
        
        degree += speed;
    }

六.运行类SolarFrame

public class SolarFrame extends MyFrame {
    Image bg = GameUtil.getImage("images/bg.jpg");
    Star sun = new Star("images/sun.jpg", Constant.GAME_WIDTH/2, Constant.GAME_HEIGHT/2);
    Planet earth = new Planet(sun, "images/earth.jpg", 150, 100, 0.1);
    Planet moon = new Planet(earth, "images/moon.jpg", 30, 20, 0.3,true);
    Planet mars = new Planet(sun, "images/Mars.jpg", 200, 130, 0.2);
    
    
    public void paint(Graphics g){
        g.drawImage(bg, 0, 0, null);
        sun.draw(g);
        earth.draw(g);
        mars.draw(g);
        
        moon.draw(g);
    }
    
    public static void main(String[] args) {
        new SolarFrame().launchFrame();
    }
}
原文地址:https://www.cnblogs.com/xiaochi/p/4994404.html