Неправильная анимация движения автомобиля по дороге - Visual Basic .NET

  1. Господа создаю программку (исходник прикрепил) не как не получается сделать анимацию правого автомобиля , хочется чтобы правый двигался так же как и левый авто в связи с чем прошу вашей помощи в решение этой задачи . сам любитель поэтому делал программку по этому не судите строго!


textual

Код:

    Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
        If Tv3 = "on" Then
            PictureBox6.Visible = False
 
            PictureBox4.Left = PictureBox4.Left - 4
 
            PictureBox4.Height = PictureBox4.Height - 1
            PictureBox4.Width = PictureBox4.Width + 4
        End If
 
        If PictureBox4.Height >= Form1.ActiveForm.Height + 200 - PictureBox4.Width Then ' Если картинка достигла края формы(почти у каждого объекта есть свойства Width(ширина) и Height(высота)(в окне свойств они входят в разворачивающий список 'Size') Так вот, Form1.ActiveForm.Width - ширина формы(чтобы изменить свойства формы, в VB.Net надо писать не Form1.Свойство, а Form1.ActiveForm.Свойство), PictureBox1.Width - ширина картинки. От ширины формы отнимаем ширину картинки, и получаем край формы. Блин.. чё - то я в объяснениях перестарался :-))
            ' Двигаем картинку в другом направлении:
            PictureBox4.Visible = True
            PictureBox6.Visible = True
 
 
            Timer5.Enabled = False
        End If
    End Sub


Похожие ответы
  1. как сделать вот такое на вб нет ?) https://www.youtube.com/watch?v=sGXIsXtpN0k

  1. Искал, но не нашел (возможно и не там искал) - как реализовать анимированный gif? Покадрово с таймером - понятно. Буду признателен за идею.

  1. есть задача-на Vb.net используя только GDI+ смоделировать движение колеса и точки на нем. фактически нужно анимировать отрисовку циклоиды.vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 Gr = Me.CreateGraphics()         Me.Show()         Gr.PageUnit = GraphicsUnit.Millimeter         Gr.ScaleTransform(10.0F, -10.0F)         Gr.TranslateTransform(1.0F, -15.0F)         TextBox1.Text = "10"         'Gr.DrawRectangle(Pen1, 0.0F, 0.0F, 1000.0F, 1000.0F)         '  Gr.DrawLine(Pen1, 0.0F, 0.0F, 0.0F, 15000.0F)           Gr.DrawLine(Pen1, 0.0F, 0.0F, 15.0F, 0.0F)         Button2.Show()     End Sub           Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click           Gr.DrawLine(Pen1, 0.0F, 0.0F, 15.0F, 0.0F)         Ta = Convert.ToDouble(TextBox1.Text)         Ta = 1 / Ta           Dim t1 As Date         Dim t2 As Date         Dim t As Single         R1 = 0.1F         R2 = 1.0F         t1 = Date.Now             K1 = 0.0F         K2 = 0.0F                 Y = 1.0           K2 = 0.0F         k3 = 0.0F         V = 0 - R2         t = R2 * 2 * Math.PI         For i = 0 To 2 * t Step 0.01               X = R2 * i - R2 * Math.Sin(i)             X2 = R2 * i - R2 * Math.Sin(i + 2 * Math.PI / 3)             X3 = R2 * i - R2 * Math.Sin(i - 2 * Math.PI / 3)             Y = R2 - R2 * Math.Cos(i)             Y2 = R2 - R2 * Math.Cos(i + 2 * Math.PI / 3)             Y3 = R2 - R2 * Math.Cos(i - 2 * Math.PI / 3)                   Cx1 = k3             Cy1 = R2               Gr.DrawEllipse(Pen1, k3 - R2, 0.0F, 2 * R2, 2 * R2) 'колесо             Gr.DrawLine(Pen1, K1, K2, X, Y) 'траектория             Gr.DrawLine(Pen1, Cx1, Cy1, X, Y) 'спица             Gr.DrawLine(Pen1, Cx1, Cy1, X2, Y2) 'спица              Gr.DrawLine(Pen1, Cx1, Cy1, X3, Y3) 'спица             Gr.FillEllipse(br1, X - R1, Y - R1, 2 * R1, 2 * R1) 'точка             Gr.FillEllipse(br1, k3 - R1, R2 - R1, 2 * R1, 2 * R1) 'центр               Threading.Thread.Sleep(Ta * 100)               Gr.DrawEllipse(Pen3, k3 - R2, 0.0F, 2 * R2, 2 * R2)             Gr.DrawLine(Pen2, Cx1, Cy1, X3, Y3) 'спица             Gr.DrawLine(Pen2, Cx1, Cy1, X2, Y2) 'спица             Gr.DrawLine(Pen2, Cx1, Cy1, X, Y)             Gr.DrawLine(Pen1, K1, K2, X, Y)             Gr.FillEllipse(br2, X - R1, Y - R1, 2 * R1, 2 * R1) 'точка             Gr.FillEllipse(br2, k3 - R1, R2 - R1, 2 * R1, 2 * R1) 'центр                         K1 = X             K2 = Y             k3 = k3 + 0.01         Next           t2 = Date.Now         Label4.Text = t2.Second - t1.Second & ":" & t2.Millisecond - t1.Millisecond         Label4.Show()     End Subиспользуемый метод анимации топорен, но с ходу ничего лучше не придумалось.как следствие при отрисовке элипса и последующем его затирании траектория затирается тоже. прошу подсказать возможность исправления этого кода или другой способ анимации

  1. vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ublic Class Form1     Dim x, y, h, w As Integer     Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick         Dim Graph As Graphics         Graph = Me.CreateGraphics         Graph.DrawEllipse(Pens.LightGray, 200, x, 40, 40)         x = x + 1         Graph.FillEllipse(Brushes.Beige, 200, x, 40, 40)         If (x = h - 40) Or (y = w - 40) Then Timer1.Stop()     End Sub       Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load              Me.BackColor = Color.LightGray     End Sub End Classкак сделать что бы шарик двигался снизу вверх..а не сверху вниз?? помогите плиз

  1. Всем привет. У меня есть картинка реки (озера). Вернее картинки - их много. Надо сделать анимацию воды. Какими средствами и как можно ее осуществить?

  1. Пытаюсь сделать анимацию, где в пикчербоксе летают два шарика и при соприкосновении отталктваютсяvb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50        ' переменные Dim x As Integer = 10     Dim y As Integer = 30     Dim x1 As Integer = 150     Dim y1 As Integer = 10     Dim dx1 As Integer = 1     Dim dy1 As Integer = 1     Dim xx As Integer = 30     Dim yy As Integer = 30     Dim L As Integer = 10     Dim U As Integer = 10     Dim R As Integer = 310     Dim D As Integer = 260     Dim dx As Integer = 2     Dim dy As Integer = 2 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' задаем переменные         Dim a As Graphics = PictureBox1.CreateGraphics         Dim b As Graphics = PictureBox1.CreateGraphics         Dim e1, e2, s1, s2 As Point         e1 = New Point(x, y)         e2 = New Point(x1, y1)         s1 = New Point(xx, yy)         s2 = New Point(xx, yy) 'очищаем         PictureBox1.Refresh() 'услолвия отрожения шарика от стены         If x < L Then dx = -dx         If y < U Then dy = -dy         If y > D Then dy = -dy         If x > R Then dx = -dx         If x1 < L Then dx1 = -dx1         If y1 < U Then dy1 = -dy1         If y1 > D Then dy1 = -dy1         If x1 > R Then dx1 = -dx1 ' рисование самих шариков и задание движения         a.DrawEllipse(New Pen(Color.White), x, y, xx, yy)         b.DrawEllipse(New Pen(Color.Red, 2), x1, y1, xx, yy)         x1 = x1 + dx1         y1 = y1 + dy1         x = x + dx         y = y + dy ' попытка сделать отражение друг от друга, с условие вроде все ОК, но шарики начинают судорожно 'деркаться при касании друг друга         If ((e1.X <= e2.X And e2.X <= e1.X + s1.X) Or (e1.X <= e2.X + s2.X And e2.X + s2.X <= e1.X + s1.X)) And ((e1.Y <= e2.Y And e2.Y <= e1.Y + s1.Y) Or (e1.Y <= e2.Y + s2.Y And e2.Y + s2.Y <= e1.Y + s1.Y)) Then             dx = -dx             dy = -dy             dx1 = -dx1             dy1 = -dy1         End If     End Sub

  1. Пытаюсь написать программу, при включении которой, шарик начинает двигаться по форме и отскакивать от стенок. Для того чтобы сзодать движение пытаюсь обработать событие Timer_Tickvb.net1 2 3 4     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick         Dim a As Graphics         a.DrawEllipse(New Pen(Color.Red), 10, 10, 20, 20)     End SubНо пишет, что не присвоено значегие "а", а как это сделать? Помогите новичку советом)

  1. игра арканоид. на форме отображаются считанные из карт файлов "кирпичики" и прорисованные "шарик" и ракетка. Ракетка управляется движением мыши, а "шарик" движется при работе таймера. Проблема1:перерисовывается все, что есть на форме. Вопрос1: как сделать, чтобы двигались только шарик и ракетка, а все остальное оставалось неподвижным? Проблема2: не могу придумать, как проверить столкновение шарика с разными сторонами нарисованных кирпичиков Вопрос2: как проверить это столкновение и сделать, чтобы "кирпичик" от столкновения исчез, а шарик оттолкнулся и продолжил движение? мой код: Кликните здесь для просмотра всего текста vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 Imports System.Drawing.Drawing2D Public Class Form1     Dim VSpeed As Single = 2     Dim HSpeed As Single = 2     Dim Score As Integer = 0     Dim x As Integer = 0     Dim x1 As Integer = 0     Dim y As Integer = 0     Dim y1 As Integer = 0     Dim SizeMode As String = "small"     Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint         Dim graph As Graphics = e.Graphics         Dim pen As New Pen(Color.Black, 1)         'Прорисовка ракетки         Dim b As New SolidBrush(Color.DarkGoldenrod)         Dim point() As Point = {New Point(x + 2, y + 230), New Point(x + 102, y + 230),             New Point(x + 102, y + 240), New Point(x + 2, y + 240)}         Dim poin() As Point = {New Point(x + 3, y + 231), New Point(x + 102, y + 230),             New Point(x + 102, y + 240), New Point(x + 2, y + 240)}         graph.DrawPolygon(pen, point)         graph.FillPolygon(b, poin)         e.Graphics.DrawLine(Pens.Black, 360, 0, 360, 350)         'Прорисовка шарика         Dim b1 As New SolidBrush(Color.RosyBrown)         Dim point1() As Point = {New Point(x1 + 100, y1 + 200), New Point(x1 + 120, y1 + 200),             New Point(x1 + 120, y1 + 220), New Point(x1 + 100, y1 + 220)}         Dim point2() As Point = {New Point(x1 + 101, y1 + 201), New Point(x1 + 120, y1 + 200),             New Point(x1 + 120, y1 + 220), New Point(x1 + 100, y1 + 220)}         graph.DrawPolygon(pen, point1)         graph.FillPolygon(b1, point2)         'Прорисовка кирпичиков         Select Case SizeMode.ToLower             Case "small"                 Dim lines() As String = IO.File.ReadAllLines("D:\card1.txt")                 Dim st As Brick                 For i = 0 To lines.Count - 1                     For j = 0 To lines(i).Count - 1                         If lines(i)(j) = "1" Then                             st = New Brick(New Point(j * 35, i * 23))                         End If                     Next                 Next         End Select     End Sub     Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick         Me.Refresh()         ''Движение шарика         'Check Left side of Screen         If (x1 + 100) < 0 Then             HSpeed = -HSpeed         End If         'Check Right side of Screen         If (x1 + 120) = 360 Then             HSpeed = -HSpeed         End If         x1 += HSpeed         'Check Top of Screen         If (y1 + 200) < 0 Then             VSpeed = -VSpeed         End If         'Check Bottom of Screen         If (y1 + 220) > Me.ClientRectangle.Height Then             Timer1.Enabled = False         End If         y1 += -VSpeed         'Столкновение с ракеткой         Dim C As Single = x1 + 110 'координаты центра шарика (x1+100)+(x1+120-(x1+100))/2         If C > (x + 2) And C < (x + 102) And VSpeed < 0 And             (y1 + 220) = (y + 230) And (y1 + 200) < (y + 230) Then             VSpeed = -VSpeed             Dim Offset As Single = C - (x + 52) 'смещение C-((x + 2) + (x + 102-(x+2) )/ 2)             Dim Ratio As Single = Offset / 50 'Offset/((x+102-(x+2)/2))             HSpeed += 2 * Ratio         End If     End Sub     Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove         'Движение ракетки         If e.X < 270 Then             x = e.X - 10         End If     End Sub     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load         Me.Width = 550         Me.Height = 290     End Sub End Class Public Class Brick     Public Sub New(ByVal pos As Point)         Dim p As New GraphicsPath         p.AddRectangle(New RectangleF(pos, New Size(30, 20)))         Dim br As New PathGradientBrush(p)         br.CenterColor = Color.White         br.CenterPoint = New Point(pos.X + 15, pos.Y + 10)         br.SurroundColors = {Color.BurlyWood}         Dim g As Graphics = Form1.CreateGraphics         g.CompositingQuality = CompositingQuality.HighQuality         g.SmoothingMode = SmoothingMode.HighQuality         g.DrawPath(Pens.Black, p)         g.FillPath(br, p)     End Sub End Class что получается:

  1. Доброй ночи, господа! Есть функция которая добывает информацию и возвращает ее в виде массива String() Только вот когда пытаешься засунуть этот String() в ComboBox.DataSource, то вместо русских символов отображаются черные ромбики, внутри которых белые знаки вопросов. Вот функция:vb.net1 2 3 4 5 6 7 8 9 Private Function BassWasapiDevices() As String()         Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8         Dim DeviceInfo() As BASS_WASAPI_DEVICEINFO = BassWasapi.BASS_WASAPI_GetDeviceInfos         Dim DeviceInfos(DeviceInfo.Length - 1) As String         For i As Integer = 0 To DeviceInfo.Length - 1 Step 1             DeviceInfos(i) = enc.GetString(enc.GetBytes(DeviceInfo(i).name))         Next i         Return DeviceInfos     End FunctionКак видите, бороться я уже пытался, но безуспешно... Может кто-то предложит что-то получше?