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