Se me han ocurrido varias soluciones pero no las veo nada practicas.
como mover el picturebox por posciciones es decir ir asignadole cordenadas para dibujar la curva y moverlo con un timer.
¿De que otra forma piensas que se podría mover un control si no utilizas "algo" (como un Timer, o el método Threading.Sleep) para asignarle unas coordenadas distintas a las actuales y así moverlo?.
No soy experto en gráficos, pero vaya creo que no puede haber otra forma en esencia es eso...
Mi duda mas concreta es como dibujo una curva (o un recorrido) y que el piturebox se mueva sobre ese recorrido, no se si me doy a entender.
Simplemente utiliza el evento Paint para dibujar:
' Create points that define curve.
Dim point1 As New Point(50, 50)
Dim point2 As New Point(100, 25)
Dim point3 As New Point(200, 5)
Dim point4 As New Point(250, 50)
Dim point5 As New Point(300, 100)
Dim point6 As New Point(350, 200)
Dim point7 As New Point(250, 250)
Dim curvePoints As Point() =
{
point1, point2,
point3, point4,
point5, point6,
point7
}
''' <summary>
''' Handles the <see cref="E:Paint" /> event.
''' </summary>
''' <param name="e">A <see cref="T:System.Windows.Forms.PaintEventArgs" /> that contains the event data.</param>
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
Using graphPath As New GraphicsPath
graphPath.AddCurve(curvePoints)
Using pathPen As New Pen(Color.Red)
e.Graphics.DrawPath(pathPen, graphPath)
End Using
End Using
End Sub
Para mover un elemento por el trazo, necesitas averiguar algunos factores, yo no soy muy bueno en la aritmética así que he sacado (y refactorizado) un ejemplo que encontré aquí:
http://www.dreamincode.net/forums/topic/293148-getting-an-object-to-follow-a-bezier-curve/ MoveControl(ctrl:=Me.PictureBox1, speed:=200, path:=curvePoints)
''' <summary>
''' Moves a control through a path.
''' </summary>
''' <param name="ctrl">The control to move.</param>
''' <param name="speed">The animation speed.</param>
''' <param name="path">The path to follow.</param>
Public Shared Sub MoveControl(ByVal ctrl As Control,
ByVal speed As Integer,
ByVal path As IEnumerable(Of Point))
For index As Integer = 1 To (path.Count - 1)
Dim m As Double = (path(index).Y - path(index - 1).Y) / (path(index).X - path(index - 1).X)
Dim c As Double = (path(index).Y) - (m * path(index).X)
Dim sign As Integer = Math.Sign(path(index).X - path(index - 1).X)
While (ctrl.Left <> path(index).X)
Application.DoEvents()
ctrl.Left += (sign * 5)
ctrl.Top = CInt(m * CDbl(ctrl.Left) + c)
Thread.Sleep(speed)
End While
End Sub
No se que librerias puedo usar para hacer este tipo de practica les agradeceria cualquier ayuda
¿A qué tipo de prácticas te refieres exactamente?, ¿a mover un elemento por la UI, o desarrollar un juego?.
Para lo primero ...simplemente es mover el control y ya está, cualquiera puede hacerlo sin una librería que nos haga de "ayudante" xD, sin embargo, existe una librería dedicada a efectos/transiciones para la UI, la cual proporciona un método para mover un elemento de un punto a otro, la utilización sería algo así:
(el control se mueve mal, pero es solo un ejemplo on-the-fly, como ya dije los cálculos de los ángulos en fin la trayectoria se me da mal)
Imports Transitions
Public NotInheritable Class Form1 : Inherits Form
' Create points that define curve.
Dim point1 As New Point(50, 50)
Dim point2 As New Point(100, 25)
Dim point3 As New Point(200, 5)
Dim point4 As New Point(250, 50)
Dim point5 As New Point(300, 100)
Dim point6 As New Point(350, 200)
Dim point7 As New Point(250, 250)
Dim curvePoints As Point() =
{
point1, point2,
point3, point4,
point5, point6,
point7
}
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Shown
Dim speed As Integer = 200
Dim transitions As New List(Of Transition)
For index As Integer = 0 To (curvePoints.Count - 2) Step 2
Dim transition As New Transition(New TransitionType_Linear(iTransitionTime:=speed))
With transition
.add(PictureBox1, "Left", curvePoints(index).X)
.add(PictureBox1, "Top", curvePoints(index + 1).Y)
End With
transitions.Add(transition)
Next
Transition.runChain()
End Sub
End Class
Para lo segundo, suponiendo que estés desarrollando un juego (por las imágenes de los coches, y ahora las curvas), entonces estás empezando mal, deberías utilizar librerías especializadas en esa temática, cualquier librería basada en
DirectX u
OpenGL, o el framework
XNA de Microsoft (aunque está deprecado ya), etc.
➢
SharpDXSin embargo, es una temática muy compleja de manejar, crear una forma y dibujarla lo puede hacer cualquier (aunque solo eso ya necesita unas cuantas lecturas de manual xD), yo intenté hacer algo simple hace un tiempo y me agobié por completo al final xD.
Saludos