Bonsoir,
Ca fait un petit moment que j'ai rien poster... Faut dire que je sais pas vraiment quoi mettre, malgré le fait que j'ai pas mal de projets terminés, et pas mal.
Bref ce programme permet de faire suivre une trajectoire à un objet (ici une PictureBox), en créant des points à n'importe quel endroit de la feuille.
Source / Exemple :
Public Class Form1
Dim Trajet(0, 1), Max, n As Integer
Dim Dwn As Boolean
Sub Projeter(ByVal Element As PictureBox)
'Cette procédure sert à projeter l'objet en fonction de la trajectoire.
'Le déplacement est basique ici^^.
'----------------------------------------NOTE (IMPORTANTE?)-------------------------------
'Note: Trajet(x,0) représente l'abscisse, et Trajet(x,1) représente l'ordonnée (au cas où_
'vous ne l'auriez pas deviné^^).
'-----------------------------------------------------------------------------------------
With Element
'Width/2 et Height/2 permettent de placer le centre de l'objet sur le point (ça fait moins moche ;-)^^).
.Left = Trajet(n, 0) - (.Width / 2)
.Top = Trajet(n, 1) - (.Height / 2)
End With
'On passe à la ligne suivante du tableau.
n = n + 1
End Sub
Private Sub timLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timLoad.Tick
'Ce Timer permet de générer aléatoirement des points pour constituer la trajectoire.
Dim a As Integer
'Tant qu'on peut faire des points,
For a = 0 To Max
'On active la fonction Randomize pour plus de suspense^^.
Randomize()
'On génère une valeur aléatoire à l'aide de la fonction Rnd() pour les 2 coordonnées.
Trajet(a, 0) = Int(Rnd() * Me.Width)
Trajet(a, 1) = Int(Rnd() * Me.Height)
'On dessine le point correspondant à cette dernière trajectoire.
Me.CreateGraphics.FillEllipse(Brushes.Black, Trajet(a, 0), Trajet(a, 1), 10, 10)
Next
'Une fois les points de la trajectoire générés, on n'a plus besoin de ce Timer.
timLoad.Enabled = False
'Du coup, on active celui qui permet de déplacer l'objet en fonction de cette trajectoire.
timTrj.Enabled = True
End Sub
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
'Si l'utilisateur appuie sur la touche "Entrée", on lance le Timer permettant de déplacer l'élément_
'en fonction de la trajectoire, tout en remettant n à zéro.
If e.KeyCode = Keys.Return Then
n = 0
timTrj.Enabled = True
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'On demande si la trajectoire doit être générée aléatoirement ou si l'utilisateur_
'préfère tracer lui-même la trajectoire.
If MsgBox("Voulez-vous générer la trajectoire?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
timLoad.Enabled = True
Else
MsgBox("Cliquez pour créer un point." & vbCrLf & "Appuyez sur ""Entrée"" pour suivre la trajectoire.", MsgBoxStyle.Information)
End If
'Note: vous pouvez modifier les 2 valeurs suivantes à votre guise (accès plus simple ici qu'ailleurs^^).
'-------------------------------------------------------------------------------------------------------
'On fixe le maximum de points permettant de tracer la trajectoire de l'objet.
Max = 1000
'On règle l'intervalle
timTrj.Interval = 100
'On redimensionne le tableau mémorisant la trajectoire en fonction de la valeur du maximum.
'Note: ça ne sert à rien de préserver les valeurs du tableau, puisqu'il n'y en n'a pas^^.
ReDim Trajet(Max, 1)
'Ces instructions permettaient de faire un test.
'-----------------------------------------------
'Dim a As Integer
'For a = 0 To 4
'Trajet(a, 0) = 50
'Trajet(a, 1) = 250 - (50 * (a + 1))
'Next
'For a = 5 To 7
'Trajet(a, 0) = 50 + (30 * (a - 4))
'Trajet(a, 1) = 0
'Next
'timTrj.Enabled = True
End Sub
Private Sub timTrj_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timTrj.Tick
'Timer permettant de déplacer l'objet selon la trajectoire.
'----------------------------------------------------------
'Si les coordonnées sont différentes de (0,0) (->ça signifie qu'aucun point n'est mémorisé dans cette ligne,_
'bien qu'on puisse définir un point à cet endroit... Mais ça évite de déplacer l'objet alors que ça n'a pas_
'été demandé.
If Not (Trajet(n, 0) = 0 And Trajet(n, 1) = 0) Then
'On vérifie qu'on ne dépasse pas le maximum de points autorisés.
If n <= Max Then Projeter(picMain) Else GoTo Condition
Else
GoTo Condition
End If
Exit Sub
Condition:
'Dans les cas inverses:
'On désactive le Timer car l'objet n'a plus à être déplacé;
timTrj.Enabled = False
Dim a As Integer
'On vide le tableau afin d'effacer l'ancienne trajectoire;
For a = 0 To Max
Trajet(a, 0) = 0
Trajet(a, 1) = 0
Next
'Et on remet n à zéro afin de recommencer la trajectoire depuis le début.
n = 0
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
'On note que le click est enclenché.
Dwn = True
'On s'assure de ne pas dépasser la limite des points à tracer.
If n < Max Then
PointIt(e)
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
'C'est la même chose que pour l'instruction MouseDown, seulement on trace les points tant que_
'l'utilisateur déplace la souris, dans la limite des points de trajectoire disponibles.
If Dwn = True Then
If n < Max Then
PointIt(e)
End If
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
'On indique que le click n'est plus enfoncé pour l'instruction MouseMove.
Dwn = False
End Sub
Sub PointIt(ByVal EventSouris As System.Windows.Forms.MouseEventArgs)
'On mémorise l'emplacement du point actuel dans le tableau Trajet.
Trajet(n, 0) = EventSouris.X
Trajet(n, 1) = EventSouris.Y
'On créé un point dès que l'utilisateur clique sur la form.
Me.CreateGraphics.FillEllipse(Brushes.Black, Trajet(n, 0), Trajet(n, 1), 10, 10)
'On incrémente n pour passer à la prochaine ligne du tableau.
n = n + 1
End Sub
End Class
Conclusion :
Les points sont mémorisés dans un tableau aux dimensions étirables, puis affichés un à un et enfin suivis par l'objet.
Il n'y a vraiment rien de compliqué, seulement à la base, je voulais faire chercher le chemin automatiquement par l'objet (ici c'est simplifié, ça se déplace directement sur le point).
Surement que je mettrai à jour en améliorant ça^^ (ça ferait mieux du coup :p).
Voilà, n'hésitez pas à commenter si besoin!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.