Visual Basic – Animacja wektorowa
Transkrypt
Visual Basic – Animacja wektorowa
Visual Basic – Animacja wektorowa Lądowanie i start samolotu Nazwy formantów: shpSamolot, shpOgon grpTrybPracy rbLadowanie, rbStart linPas, linGranica btnUruchom btnZatrzymaj btnPowrot timTimer Public Class Form1 ' ' Deklaracje zmiennych wykorzystywanych w całym programie Dim PoczatekLadowania, PoczatekStartu As Point ' ' Deklaracje stałych zmian współrzędnych w kroku animacji Const dX = 20, dY = 10 Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' ' Określenie początkowych punktów dla lądowania i startu PoczatekLadowania.X = linPas.X1 PoczatekLadowania.Y = 40 PoczatekStartu.X = linPas.X1 PoczatekStartu.Y = linPas.Y1 - shpSamolot.Height ' ' Ustawienie samolotu w punkcie początkowym lądowania ' (wariant domyślny w związku z zaznaczeniem [rbLadowanie]) shpSamolot.Location = PoczatekLadowania shpOgon.Top = PoczatekLadowania.Y - shpOgon.Height shpOgon.Left = PoczatekLadowania.X End Sub Private Sub btnUruchom_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnUruchom.Click ' ' Wyłączenie możliwości zmiany trybu pracy grpTrybPracy.Enabled = False ' ' Uruchomienie animacji timTimer.Enabled = True End Sub Private Sub btnZatrzymaj_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnZatrzymaj.Click ' ' Zatrzymanie animacji timTimer.Enabled = False ' ' Włączenie możliwości zmiany trybu pracy grpTrybPracy.Enabled = True End Sub Private Sub timTimer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles timTimer.Tick ' ' Wykonanie kroku animacji, zależnie od wyboru trybu pracy ' ' 1. Lądowanie If rbLadowanie.Checked = True Then If shpSamolot.Top + shpSamolot.Height + dY < linPas.Y1 Then ' ' Przed przyziemieniem shpSamolot.Top = shpSamolot.Top + dY shpOgon.Top = shpSamolot.Top - shpOgon.Height shpSamolot.Left = shpSamolot.Left + dX shpOgon.Left = shpSamolot.Left Else ' ' Dobieg po przyziemieniu shpSamolot.Top = linPas.Y1 - shpSamolot.Height shpOgon.Top = shpSamolot.Top - shpOgon.Height If shpSamolot.Left + shpSamolot.Width + dX < linPas.X2 Then shpSamolot.Left = shpSamolot.Left + dX shpOgon.Left = shpSamolot.Left Else ' ' Zatrzymanie na końcu pasa i wyłączenie animacji shpSamolot.Left = linPas.X2 - shpSamolot.Width shpOgon.Left = shpSamolot.Left ' timTimer.Enabled = False grpTrybPracy.Enabled = True End If End If Else ' 2. Start ' ' Rozbieg po pasie shpSamolot.Left = shpSamolot.Left + dX shpOgon.Left = shpSamolot.Left ' ' Oderwanie się od pasa i wznoszenie If shpSamolot.Left + shpSamolot.Width + dX > linGranica.X1 Then shpSamolot.Top = shpSamolot.Top - dY shpOgon.Top = shpSamolot.Top - shpOgon.Height End If End If End Sub Private Sub btnPowrot_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnPowrot.Click ' ' Powrót samolotu na pozycję początkową dla wybranego trybu pracy If rbLadowanie.Checked Then ' Lądowanie shpSamolot.Location = PoczatekLadowania shpOgon.Left = PoczatekLadowania.X shpOgon.Top = PoczatekLadowania.Y - shpOgon.Height Else ' Start shpSamolot.Location = PoczatekStartu shpOgon.Left = PoczatekStartu.X shpOgon.Top = PoczatekStartu.Y - shpOgon.Height End If End Sub Private Sub rbLadowanie_CheckedChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles rbLadowanie.CheckedChanged ' ' Sprawdzenie początkowego położenia samolotu i ewentualna korekta If rbLadowanie.Checked = True Then If shpSamolot.Location <> PoczatekLadowania Then shpSamolot.Location = PoczatekLadowania shpOgon.Left = shpSamolot.Left shpOgon.Top = shpSamolot.Top - shpOgon.Height End If Else If shpSamolot.Location <> PoczatekStartu Then shpSamolot.Location = PoczatekStartu shpOgon.Left = shpSamolot.Left shpOgon.Top = shpSamolot.Top - shpOgon.Height End If End If End Sub End Class