配列とアニメーション
配列を使うと、たとえば以下のようなアニメーションを作ることができる
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方向速度 |