lordfinalff
Messages postés84Date d'inscriptionvendredi 2 septembre 2005StatutMembreDernière intervention14 décembre 2009
-
19 juil. 2006 à 13:53
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
19 juil. 2006 à 15:10
Je suis en train de faire un jeu, ou on deplace l'image grace au fleche directionel, pour cela, j'utilise la fonction keydown, mais, etais donné que le personnage vol, j'aimerai un déplacement plus fluide, j'aimerai aussi pouvoir combiné plusieur touches, par exemple, lorsqu'on appui sur la flèche gauche, et la flèche haut, j'aimerai que le personnage monte en diagonale vers la gauche.
Voici a quoi ressemble mon code
je vous previens que je débute !
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case Is = vbKeyLeft ' je demande cherche qu'elle touche a été pressé
If Perso.Left = 0 Then ' je surveille que le personnage ne puisse pas sortir de l'écran
Else
Perso.Picture = Trunks_g_2.Picture ' si tout est bon, je met l'image du perso qui regarde vers la gauche
Perso.Left = Perso.Left - 500 ' je le fais bouger
direction = "gauche" ' je met dans une variable dans quel sans il est, utile pour quand il attaquera,
End If ' et je clos le tout
Case Is = vbKeyRight
If Perso.Left = 7000 Then
Else
Perso.Picture = Trunks_d_2.Picture
Perso.Left = Perso.Left + 500
direction = "droite"
End If
le probleme, c'est que le personnage se deplace par acoup, et si lorsqu'il va vers la gauche, j'appuis sur la touche haut, il prendra en compte la derniere touche préssé, et montera, mais n'ira pas vers la gauche ne meme temps !!
LORDFINALFF
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 juil. 2006 à 14:16
Salut,
Essaie un truc de ce style
'Variable privee du Form
Private BLeft As Boolean
Private BRight As Boolean
Private BUp As Boolean
Private BDown As Boolean
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyUp: BUp = False
Case vbKeyDown: BDown = False
Case vbKeyLeft: BLeft = False
Case vbKeyRight: BRight = False
End Select
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim x As Long
Dim y As Long
x = Perso.Left
y = Perso.Top
Select Case KeyCode
Case vbKeyUp: BUp = True
Case vbKeyDown: BDown = True
Case vbKeyLeft: BLeft = True
Case vbKeyRight: BRight = True
End Select
If BLeft Then
x = x - 500 'déplacement vers la gauche
ElseIf BRight Then
x = x + 500 'déplacement vers la droite
End If
If BUp Then
y = y - 500 'déplacement vers le haut
ElseIf BDown Then
y = y + 500 'déplacement vers le bas
End If
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 19 juil. 2006 à 14:33
Le call Perso.move revient à tes :
Perso.Left = ...
Perso.Top = ...
Si tu veux un affichage plus fluide, diminue l'incrément, et utilise un timer pour le déplacer, exemple :
Timer1_Timer
Perso.Left = Perso.Left + 100
Perso.Top = Perso.Top + 100
avec un timer à 100 ms, l'affichage sera plus fluide qu'en faisant un simple :
Perso.Left = Perso.Left + 500
Perso.Top = Perso.Top + 500
toutes les 500 ms !
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 juil. 2006 à 14:41
SAlut,
Je pensais que le code était pourtant assez simple.
'Variable privee du Form
Private BLeft As Boolean 'Flag permettant de mémoriser si la touche Fleche Gauche a ete appuyée
Private BRight As Boolean 'Flag permettant de mémoriser si la touche Fleche Droite a ete appuyée
Private BUp As Boolean 'Flag permettant de mémoriser si la touche Fleche Haut a ete appuyée
Private BDown As Boolean 'Flag permettant de mémoriser si la touche Fleche Bas a ete appuyée
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
'Survient lorsque une touche est relachée
Select
Case KeyCode
'Si c'est la touche Fleche Haut qui est relachée reinitialise le Flag
Case vbKeyUp: BUp = False
'Si c'est la touche Fleche Bas qui est relachée reinitialise le Flag
Case vbKeyDown: BDown = False
'Si c'est la touche Fleche Gauche qui est relachée reinitialise le Flag
Case vbKeyLeft: BLeft = False
'Si c'est la touche Fleche Droite qui est relachée reinitialise le Flag
Case vbKeyRight: BRight = False
End Select
End Sub
Pour le reste je pense que c'est assez simple.
Suivant les flag memorise, on joue avec les propriétés Top est Left de l'image
Les cas qui sont pénibles sont les cas Haut + Bas et Gauche + Droite. a toi de voir ce que tu privilégie.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée, Règlement /FONT>
lordfinalff
Messages postés84Date d'inscriptionvendredi 2 septembre 2005StatutMembreDernière intervention14 décembre 2009 19 juil. 2006 à 14:49
meric jrivet, mais ton code, comme tu me la dit, correspond au mien, mais en plus court, mais cela ne permet toujours pas un deplacemnt plus fluide, en fait, ce que je voudrais surtout, c'est que l'ont puisse par exemple, en appuyant sur gauche et haut, que le personnage s'oriente vers la gauche tout en montant, faire une diagonale quoi !
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 19 juil. 2006 à 15:10
salut,
tu as toutes les pistes....
plus fluide : timer à intervalle plus court
peut-être aussi bien vérifier tes propriétés autoredraw.. certaines sont peut-être inutiles
diagonales : API. revoir fin du message de JRivet.
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp