Sprite を切り替える

マウスのクリックで Sprite を切り替えます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 次のファイルを格納して下さい。
    /*******************************************/
    /*★ Click で画像を切り替える    前田 稔 ★*/
    /*******************************************/
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyForm : Form
    {
        public  static Bitmap  bmp;
        int     SP_NO;
    
        public MyForm()
        {
            Name = "MyForm";
            Paint += new PaintEventHandler(MyHandler);
            MouseDown += new MouseEventHandler(OnMyMouseDown);
            SP_NO = 0;
        }
    
        private void MyHandler(object sender, PaintEventArgs e)
        {   Graphics g = e.Graphics;
            g.DrawImage(bmp,new Rectangle(80,10,128,216),
                new Rectangle(SP_NO*128,0,128,216),GraphicsUnit.Pixel);
        }
    
        private void OnMyMouseDown(object sender, MouseEventArgs e)
        {   SP_NO= (SP_NO+1)%7;
            Invalidate();
        }
    }
    
    class anime
    {
        public static void Main()
        {   // Load Image
            try
            {   MyForm.bmp= new Bitmap("c:\\data\\test\\girl.gif");  }
            catch
            {   MessageBox.Show("イメージが取得できません", "Error");
                return;
            }
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
    }
    
  2. 大きな画像から Sprite を切り出して、マウスのクリックで Sprite を切り替えます。
    このようなプログラムでは MyHandler() で毎回ファイルからイメージをロードするのは如何にも無駄です。
    そこで Main() で事前に画像をロードしておきます。
    MyForm.bmp が画像の領域で、ここに "girl.gif" をロードします。
        public  static Bitmap  bmp;
    
        public static void Main()
        {   // Load Image
            try
            {   MyForm.bmp= new Bitmap("c:\\data\\test\\girl.gif");  }
            catch
            {   MessageBox.Show("イメージが取得できません", "Error");
                return;
            }
            MyForm mf = new MyForm();
            Application.Run(mf);
        }
        
  3. SP_NO が描画する Sprite の番号で、マウスのクリックで「0~6」を繰り返します。
    マウスのクリックは マウスのクリックを検出する を参照して下さい。
        private void OnMyMouseDown(object sender, MouseEventArgs e)
        {   SP_NO= (SP_NO+1)%7;
            Invalidate();
        }
        
  4. MyHandler() では SP_NO の画像を描画します。
        private void MyHandler(object sender, PaintEventArgs e)
        {   Graphics g = e.Graphics;
            g.DrawImage(bmp,new Rectangle(80,10,128,216),
                new Rectangle(SP_NO*128,0,128,216),GraphicsUnit.Pixel);
        }
        

【演習】

  1. マウスをクリックする代わりに、タイマの設定で自動的に画像を切り替えて下さい。
    少女の髪が風でなびくアニメーションが楽しめます。
  2. タイマの説明は Timer を参照して下さい。

  3. プログラムのヒントです。
        private Timer timer1;
        private System.ComponentModel.IContainer components;
        
            // timer1
            components = new System.ComponentModel.Container();
            timer1 = new System.Windows.Forms.Timer(this.components);
            SuspendLayout();
            timer1.Interval = 200;
            timer1.Tick += new System.EventHandler(this.timer1_Tick);
    
            timer1.Start();
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            SP_NO= (SP_NO+1)%7;
            Invalidate();
        }
        
  4. 大きな画像を切り分けて Sprite を描画するクラスは カードを描画 を参照して下さい。

超初心者のプログラム入門(C# Frame Work)