JAVAゲーム『戦車大戦』(一)

15241 ワード

JAVAゲーム『戦車大戦』(一)
完成効果図これはjavaを使って完成した小さなフォームゲームで、現在すでに8方位の移動、砲弾の発射を実現して、タイミング的に敵軍の戦車を生成して自分で移動することができて、戦車と砲弾の衝突の検出、私はここでゲームの制作過程と使用する技術を総括します.
ゲームシーンレイアウト
ゲームの全体はすべてピクチャーを使ってロード展示を行って、ピクチャーはインターネットで探してps処理を行うことができて、簡単な背景の色を使って1つの画面の簡単なゲームを構築することができます.
public class tankedz extends Frame{
	private static final long serialVersionUID = 1L;
	private tankedz tc = this;
	//          ,      
	static int  width=1200;static int  height=800;
	//             
	Image zhutk = Toolkit.getDefaultToolkit().getImage("img/ztk50.png");
	Image desk = Toolkit.getDefaultToolkit().getImage("img/caopin.jpg");
    //    
    public void paint(Graphics  g){
    	fps++;
    	g.drawImage(desk, 0, 0, this);//    
    	g.setColor(Color.white);//    
    	Font font = new Font("  ", Font.BOLD, 14); //      
        g.setFont(font);
        mytank.draw(g);
        //      
        g.drawString("    :" + tankes.size(), 10, 50);
    	g.drawString("    :"+missiles.size(),10,70);
    	g.drawString("    :"+baoes.size(),10,90);
    }

	//    
	private void launchFrame(){
		this.setLocation(450,150);//    
		this.setSize(width,height);//    
		this.setTitle("         │ by    ");//     
		this.addKeyListener(new Keynote());
		//        
		this.setResizable(false); 
		setVisible(true);
		//    
		new Thread(new PaintThread()).start();
	} 
	
	//    
	//                  
	private class PaintThread implements Runnable{
		public void run() {
			while(true){
				try {
					repaint();
					Thread.sleep(33);//    
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

以上の方法で簡単にゲームフォームと背景を作成できます.上で重要な方法はスレッドを作成して画面のリフレッシュ再描画を行い、ゲーム中に戦車の移動は絶えず再描画することで実現されます.
画面点滅の問題を解決
ゲームが実行されると、リフレッシュ頻度が高すぎると画面が点滅する想像があります.これは、前の画面がまだ描画されていないため、次の画面が描画され始めているためです.特に、後の戦車が移動すると点滅現象がさらに深刻になります.この問題を解決するには画面キャッシュが必要です.描画する内容を1枚の画像にロードしてから、この画像を表示します.
//          
Image offScreenImage = null;

//               
public void update(Graphics g){
  	if(offScreenImage == null){
  		offScreenImage=this.createImage(width, height);
  	}
  	Graphics gOffScenn = offScreenImage.getGraphics();
  	paint(gOffScenn);
  	g.drawImage(offScreenImage,0,0,this);
}

ウィンドウを閉じるイベント
ウィンドウを生成するときは、ウィンドウの閉じたイベントを書き換える必要があります.プログラムを閉じたイベントに書き込むのを停止します.そうしないと、ウィンドウを閉じた後もプログラムは手動で実行する必要がある終了プログラムで停止します.
//  launchFrame 
this.addWindowListener(new WindowAdapter() {
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
});