VB.NET落下シミュレーション
【画面作成】
このように配置して(Timer1を忘れないこと,○の絵を準備する)プロパティをこんな感じに設定する。

【落下と地面判定の考え方】
理科で習う v = v0 + a t や h = v0 t + (a t2 )/2 を使うと座標の計算が出来る。しかし,変数tを使わなくても時間が来る毎にvやhを修正するやり方の方が,コンピュータ処理にあっている。
地面のぶつかり判定は,PictureBox1.Top = Me .Size.Hight では,玉の上の座標で判定しているためだめで,図のように玉の大きさを加味した,

PictureBox1.Top + PictureBox1.Hight >= Me .Size.Hight
と,しなければならない。
※ 跳ね返りや変数型の変換は大体になっています。
【コード】<<ダウンロード>>
|
Public Class Form1 Inherits
System.Windows.Forms.Form Windows フォーム デザイナで生成されたコード '変数の宣言 g重力加速度,v速度
Dim g, v As
Single
Private Sub
Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load '変数の初期化 g=9.8重力加速度,v=0速度 g = 9.8: v = 0 'timer1の初期化 0.1秒おきにタイマを呼び出す。 Timer1.Enabled = False Timer1.Interval = 100 'トラックバーの初期化と表示 TrackBar1.Value = 5 TrackBar1.LargeChange =
1 Label1.Text = "係数"
& (TrackBar1.Value / 10).ToString
End Sub
Private Sub
Form1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) _ Handles
MyBase.MouseDown 'クリックした際に玉の「中央」をそこに移動。 '「中央だから」 -PictureBox1.Width / 2 が必要になる。 PictureBox1.Left = e.X
- PictureBox1.Width / 2 PictureBox1.Top = e.Y
- PictureBox1.Height / 2
End Sub
Private Sub
Timer1_Tick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Timer1.Tick '速度の計算と玉の高さの処理 v = v + g PictureBox1.Top =
PictureBox1.Top + v '地面の判定 If PictureBox1.Top + PictureBox1.Height > Me.Size.Height Then
'地面にぶつかったときの速度に比例して,跳ね返りの計算
v = -v * TrackBar1.Value / 10
'地面に埋まった時のために,地面上に戻す処理
PictureBox1.Top = Me.Size.Height -
PictureBox1.Height End If
End Sub
Private Sub
Button1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button1.Click PictureBox1.Top = 0 If Timer1.Enabled = False
Then
Timer1.Enabled = True
Button1.Text = "ストップ" Else
Timer1.Enabled = False
Button1.Text = "落下" End If
End Sub
Private Sub
TrackBar1_Scroll(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles TrackBar1.Scroll Label1.Text = "係数"
& (TrackBar1.Value / 10).ToString End
Sub End Class |
【発 展】
横に等速で動くなるようにしてみよう。