配列とアニメーション

配列を使うと、たとえば以下のようなアニメーションを作ることができる

このページのコンテンツには、Adobe Flash Player の最新バージョンが必要です。

Adobe Flash Player を取得

Public Class Form1
    Dim x(9), y(9)   ' 10個の正方形の位置
    Dim vx(9), vy(9) ' 10個の正方形の1 tick あたりの移動量
    Private Sub Form1_Paint(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics
        g = e.Graphics
        Dim pen1 As System.Drawing.Pen
        For i = 0 To 9
            pen1 = New System.Drawing.Pen( _
                Color.FromArgb(&HFF0000FF + _
                i * 65536 * 20 - i * 20))
            g.DrawRectangle(pen1, x(i), y(i), 20, 20)
        Next
    End Sub 'p1_Paint_sub
    Private Sub Form1_Load( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs _
      ) Handles MyBase.Load
        ' Picturebox p1を準備する
        Dim p1 As PictureBox
        p1 = New PictureBox
        p1.Dock = DockStyle.Fill
        p1.BackColor = Color.White
        AddHandler p1.Paint, AddressOf Form1_Paint
        Me.Controls.Add(p1)
        ' Timer t1を準備する
        Dim Timer1 As Timer
        Timer1 = New Timer
        Timer1.Interval = 10
        Timer1.Enabled = True
        AddHandler Timer1.Tick, AddressOf Me.Timer1_Tick

        ' 10個の正方形の位置と速度を乱数で初期化する
        For i = 0 To 9
            x(i) = Rnd(1) * 200
            y(i) = Rnd(1) * 200
            vx(i) = Rnd(1) * 5
            vy(i) = Rnd(1) * 5
        Next
    End Sub

    Private Sub Timer1_Tick( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs _
      )
        For i = 0 To 9
            ' 正方形の位置に移動量を加え
            ' 1 tick 後の位置を計算する
            x(i) = x(i) + vx(i)
            y(i) = y(i) + vy(i)
            ' もし200ドットを超えたら元に戻す
            If (x(i) > 200) Then
                x(i) = 0
            End If
            If (y(i) > 200) Then
                y(i) = 0
            End If
        Next
        Me.Refresh()
    End Sub
End Class

プログラムの各部を説明する。ただし、すでに作成したプログラムと同じ部分は灰色で示し、アニメーションを変更するために、新たに書き加えた部分は詳しく説明する。

通常のアニメーションのプログラムの説明は、->こちら

 

        
Public Class Form1
元のまま
    Dim x(9), y(9)   ' 10個の正方形の位置
    Dim vx(9), vy(9) ' 1 tick あたりの移動量

x, yを10個の正方形の位置と速度を保持する変数として宣言する。

    Private Sub Form1_Paint( _
          ByVal sender As Object, _
          ByVal e As System.Windows. _
          Forms.PaintEventArgs)
        Dim g As Graphics
        g = e.Graphics
        Dim pen1 As System.Drawing.Pen
元のまま
        For i = 0 To 9
            pen1 = New System.Drawing.Pen( _
                Color.FromArgb(&HFF0000FF + _
                i * 65536 * 20 - i * 20))
            g.DrawRectangle(pen1, _
                x(i), y(i), 20, 20)
        Next
各正方形の色を変化させる。また配列で指定された座標に描画する。
    End Sub 'p1_Paint_sub
    Private Sub Form1_Load( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs _
      ) Handles MyBase.Load
        ' Picturebox p1を準備する
        Dim p1 As PictureBox
        p1 = New PictureBox
        p1.Dock = DockStyle.Fill
        p1.BackColor = Color.White
        AddHandler p1.Paint, _
          AddressOf Form1_Paint
        Me.Controls.Add(p1)
        ' Timer t1を準備する
        Dim Timer1 As Timer
        Timer1 = New Timer
        Timer1.Interval = 10
        Timer1.Enabled = True
        AddHandler Timer1.Tick, _
          AddressOf Me.Timer1_Tick
元のまま
        ' 10個の正方形の位置と速度を
        '乱数で初期化する
        For i = 0 To 9
            x(i) = Rnd(1) * 200
            y(i) = Rnd(1) * 200
            vx(i) = Rnd(1) * 5
            vy(i) = Rnd(1) * 5
        Next
正方形を、設定されたスピードで移動する
    End Sub

    Private Sub Timer1_Tick( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs _
      )
元のまま
        For i = 0 To 9
            ' 正方形の位置に移動量を加え
            ' 1 tick 後の位置を計算する
            x(i) = x(i) + vx(i)
            y(i) = y(i) + vy(i)
            ' もし200ドットを超えたら元に戻す
            If (x(i) > 200) Then
                x(i) = 0
            End If
            If (y(i) > 200) Then
                y(i) = 0
            End If
        Next
10個の正方形の座標が200をこえたら、座標値を0にする。
        Me.Refresh()
    End Sub
End Class
        
元のまま

そして配列は以下のように、10個の正方形の位置と移動速度を記録するために使っている。

正方形0 x(0) x座標 vx(0) x方向速度
y(0) y座標 vy(0) y方向速度

 

正方形1 x(1) x座標 vx(1) x方向速度
y(1) y座標 vy(1) y方向速度

 

正方形2 x(2) x座標 vx(2) x方向速度
y(2) y座標 vy(2) y方向速度