ENEMY(敵)が出現

ENEMY(敵)が姿を変えながら画面上部で動き回ります。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. ANIME.java をコンパイルして ANIME.class を作成して下さい。
    ANIME.java は ANIME Class でアニメーション を参照して下さい。
    ANIME.class を使って ENEMY を描画する Shoot_07.java です。
    //★ ENEMY が出現    前田 稔
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.geom.Point2D;
    
    class Shoot_07 extends JFrame
    {   // Enemy
        ANIME       anime = null;
        // Double Buffer
        Dimension   size;
        Image       back = null;
        Graphics    buffer = null;
    
        // Main
        public static void main(String args[])
        {   new Shoot_07();
        }
    
        // Constructor
        public Shoot_07()
        {   super("Image View");
            anime = new ANIME("c:\\data\\test\\ene5.png",80,96);
            anime.Set(0,30,40,4,0);
            anime.SetRect(30,40,500,400);
            ThreadClass threadcls = new ThreadClass();
            Thread thread = new Thread(threadcls);
            thread.start();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(640, 480);
            setBackground(Color.gray);
            setVisible(true);
            size = getSize();
            back= createImage(size.width, size.height);
            if (back==null) System.out.println("createImage Error");
        }
    
        //  Runnable Class
        class ThreadClass implements Runnable
        {
            public void run()
            {   long    nowTime,drawTime;
                nowTime= System.currentTimeMillis();
                drawTime= nowTime+500;
                while(true)
                {   nowTime= System.currentTimeMillis();
                    if (drawTime<nowTime)
                    {   drawTime= nowTime+30;
                        Update();
                        repaint();
                    }
                }
            }
        }
    
        // Paint Method
        public void paint(Graphics g)
        {   if (back==null)     return;
            buffer= back.getGraphics();
            if (buffer==null)   return;
            if (anime==null)    return;
            buffer.setColor(getBackground());
            buffer.fillRect(0, 0, size.width, size.height);
            anime.View(buffer);
            g.drawImage(back,0,0,this);
        }
    
        // 更新処理
        public void Update()
        {   anime.Loop(10000);
            anime.Bound();
        }
    }
    
  2. 画像ファイル("c:\\data\\test\\ene5.png")をパスで指定したフォルダーに格納して下さい。
    ene5.png は 80*96 の ENEMY が5体横に並んだ画像です。
    プログラムを起動すると ENEMY(敵)が姿を変えながら画面上部で動き回ります。

プログラムの説明

  1. 前回までの説明と ANIME Class は ANIME Class でアニメーション を参照して下さい。
    ANIME anime = null; で ANIME Class を定義します。
    size, back, buffer は描画の「チラツキ」を抑えるための Back Buffer です。
        class Shoot_07 extends JFrame
        {   // Enemy
            ANIME       anime = null;
            // Double Buffer
            Dimension   size;
            Image       back = null;
            Graphics    buffer = null;
        
  2. Constructor で ANIME Class をインスタンス化して anime.Set() で ENEMY の描画を開始します。
    anime.SetRect() でゲーム画面(ウインドウ)の枠を設定します。
    あとの説明は、これまでのページを参照して下さい。
        // Constructor
        public Shoot_07()
        {   super("Image View");
            anime = new ANIME("c:\\data\\test\\ene5.png",80,96);
            anime.Set(0,30,40,4,0);
            anime.SetRect(30,40,500,400);
            ThreadClass threadcls = new ThreadClass();
            Thread thread = new Thread(threadcls);
            thread.start();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(640, 480);
            setBackground(Color.gray);
            setVisible(true);
            size = getSize();
            back= createImage(size.width, size.height);
            if (back==null) System.out.println("createImage Error");
        }
        
  3. paint() メソッドでは ANIME Class 内に持っている座標と画像番号を使って描画しています。
    座標と画像番号は Update() メソッドで更新されます。
        // Paint Method
        public void paint(Graphics g)
        {   if (back==null)     return;
            buffer= back.getGraphics();
            if (buffer==null)   return;
            if (anime==null)    return;
            buffer.setColor(getBackground());
            buffer.fillRect(0, 0, size.width, size.height);
            anime.View(buffer);
            g.drawImage(back,0,0,this);
        }
        
  4. 座標と画像番号を更新する Update() メソッドです。
    anime.Loop(10000) で 10000 o秒ごとに ENEMY(Sprite)の画像を切り替えます。
    anime.Bound() でゲーム画面(ウインドウ)の枠で跳ね返ります。
        // 更新処理
        public void Update()
        {   anime.Loop(10000);
            anime.Bound();
        }
        

超初心者のプログラム入門(Java2)