2次元アニメーションの基礎(1)

 

1.図形の移動

まず四角形を描画する.

Private Sub Form_Load()
    Picture1.ScaleMode = 3
End Sub

Private Sub Command1_Click()
    Picture1.Line (20, 20)-Step(40, 40), &HFF0000, BF
End Sub

さらに四角形を移動して描画することを考える.

Private Sub Command1_Click()
    Dim n As Integer
    For n = 1 to 300
        Picture1.Line (n, 20)-Step(40,40), &HFF,BF
    Next
End Sub

複数の四角形が重なりあって描画されることにより,結果として長方形が描かれる.

ここで描画と画像のクリアとを交互に行うように指定してみる.

Private Sub Command1_Click()
    Dim n As Integer
    For n = 1 to 300
        Picture1.Cls
        Picture1.Line (n, 20)-Step(40,40), &HFF,BF
    Next
End Sub
 

これで画面左から右へ四角形が駆け抜けていくはず..

しかし,これでは速すぎてアニメーションとして機能しないことから,
タイマーコントロールを使ってアニメーション速度を制御する.
 

タイマーコントロールは,設定した時間に応じてイベントを発生させる.
(Timer1_Timerイベント)
    Timer1.Enabled     TrueあるいはFalseを設定する.(初期はFalseになっている)
    Timer1.Interval        イベントの発生する単位をミリ秒で設定(ただしその精度は1/18秒程度)
 

とりあえず,コントロールウィンドウからタイマーコントロールを持ってきて,
Picture1上に貼り付ける.

Dim n As Integer   'nを広域宣言しておく.
Private Sub Command1_Click()
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   Picture1.Cls        '画像のクリア
    Picture1.Line(n,20)-Step(40,40),&HFF,BF
    n = n + 1   'nに1を足しておく(呼び出される毎に1増える)
End Sub

 

2.アニメーション速度とダブルバッファリング

1)アニメーションの速度

  n=n+1を n=n+5 というようにnに足す値を増やす,あるいはTimer1.Intervalの値を変えてやれば,
   アニメーションの速度を変えることが可能である.
 

2)画像のちらつき

 画像のちらつきは,描画とクリアとを繰り返すことにより,生じるものである.
 そこで,コンピュータ上に表裏の2枚の画像メモリを準備しておき,裏の画面で描画作業を行ない,描画が終ったら,表裏の画像を入れ替えるという方法が用いられる.これをダブルバッファリング(double buffering)という.
 これと同様の機能を再現するためには,VBでは以下の設定を行なうだけでよい.

    Piture1.AutoRedraw = True     'Picture1を設定する場合

 ただし,これにより描画速度は低下する.