Probleme de rafraichissement

le5ejumeau Messages postés 130 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 9 juillet 2009 - 8 févr. 2005 à 20:40
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 10 févr. 2005 à 10:07
Je veux faire bouger un bonhomme sur l'ecran et je fais comme ça :
________________________________________________________________________
Option Explicit
Dim BougeH As Boolean
Dim BougeB As Boolean
Dim BougeD As Boolean
Dim BougeG As Boolean
Dim PosY As Long
Dim PosX As Long
________________________________________________________________________
Private Sub Form_Load()
Show
Bomberman.Move 10, 10
Do
Cls
Bomberman.Visible = False
PosY = Bomberman.Top
PosX = Bomberman.Left
General
Refresh
Bomberman.Visible = True
DoEvents
Loop
End Sub
________________________________________________________________________
Function General()
Dim Vitesse As Double

Vitesse = 2 'On peut augmenter cette valeur pour accelerer le programme

If BougeD Then
Bomberman.Left = PosX + Vitesse
End If
If BougeG Then
Bomberman.Left = PosX - Vitesse
End If
If BougeH Then
Bomberman.Top = PosY - Vitesse
End If
If BougeB Then
Bomberman.Top = PosY + Vitesse
End If
End Function
________________________________________________________________________
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyRight: BougeD = False 'On ne bouge plus a droite
Case vbKeyLeft: BougeG = False 'On ne bouge plus a gauche
Case vbKeyUp: BougeH = False 'on ne bouge plus en haut
Case vbKeyDown: BougeB = False 'on ne bouge plus en bas
End Select
End Sub
________________________________________________________________________
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode Case vbKeyRight: BougeH False: BougeG False: BougeD = True: BougeB = False Case vbKeyLeft: BougeH False: BougeG True: BougeD = False: BougeB = False Case vbKeyUp: BougeH True: BougeG False: BougeD = False: BougeB = False Case vbKeyDown: BougeH False: BougeG False: BougeD = False: BougeB = True
End Select
End Sub
________________________________________________________________________
Probleme mon petit bonhomme n'arrête pas de disparaitre et de reaparaitre
pouvez vous m'aider
je ne trouve pas la solution merci

8 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 févr. 2005 à 21:18
En rouge les modifs; en bleu une amélioration pour fermer



Dim dmd_stop As Boolean



Private Sub Form_Load()

Show

BomberMan.Move 10, 10



dmd_stop = False



Do

Cls

BomberMan.Visible = False

PosY = BomberMan.Top

PosX = BomberMan.Left

General

Refresh

BomberMan.Visible = True

DoEvents

Loop Until dmd_stop = True



End Sub



Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)



dmd_stop = True



End Sub
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
8 févr. 2005 à 21:33
salut,

j'ai pas testé mais tu mets ta procédure General dans le KeyUp (ou KeyDown) et tu n'as plus besoin de do...loop...

ShareVB
0
le5ejumeau Messages postés 130 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 9 juillet 2009
8 févr. 2005 à 22:05
merci mais voila, il y a encore un probleme, losque j'enleve cls et refresh effectivement le Bonhomme ne disparait plus lorqu'il ne bouge plus mais il disparait losque je suis entrain de bouger.

de plus casy j'avais deja essayé cette solution qui marchait bien mais le probleme c'est que le bonhomme ne repondait pas aussitôt losque j'appuyais sur la touche.
0
le5ejumeau Messages postés 130 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 9 juillet 2009
8 févr. 2005 à 22:07
pardon c'est pas cassy que je voulais mettre mais ShareVB....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
9 févr. 2005 à 09:29
salut,

peut-être mais je viens d'essayer avec (et ca marche très bien):
- un PictureBox et dans ce cas j'utilise l'évènement KeyDown du PictureBox
- un Image et dans ce cas j'utilise l'évènement KeyDown de la Form

et un code dans le genre :

Select Case KeyCode
Case vbKeyDown
Picture1.Top = Picture1.Top + Vitesse
Case vbKeyUp
Picture1.Top = Picture1.Top - Vitesse
Case vbKeyLeft
Picture1.Left = Picture1.Left - Vitesse
Case vbKeyRight
Picture1.Left = Picture1.Left + Vitesse
End Select

ShareVB
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2005 à 12:20
J'avais moi aussi essayer et ça marche nickel mais ce veut surrement dire le5ejumeau c'est que dans ce cas le déplacement n'est plus fluide mais son personnage avance par saut. Cela est du au fait que lorsque tu reste appuyer sur une touche, cette touche n'est prise en compte que toutes les xx ms (500 je crois) c'est le paramètre 'taux de répétition' du clavier et c'est pas facile à configurer(et pas toujours configurable d'ailleur). C'est un paramètre Windows mais c'est aussi un paramètre BIOS avec son petit frère le 'Délai avant répétition' qui dit combien de temps doit rester appuyer la touche avant qu'il y ait répétition du caractère.
0
le5ejumeau Messages postés 130 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 9 juillet 2009
9 févr. 2005 à 15:56
oui ShareVB c'etait ça le probleme je voulais enlever ce laps de temps ou j'appuie sur la touche et le personnage n'avance pas . Ce qui marchais avec la methode que j'utilise plus haut mais seulement mon personnage ne fait qu'apparaitre et disparaitre à l'ecran.
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
10 févr. 2005 à 10:07
salut,

dans ce cas, supprime simplement les lignes ou il y a Visible et ca devrait marcher...et surement aussi le Cls et Refresh...

sinon tu peux peut etre mettre le code du do loop dans un timer à 50 ou 100 ms...

ShareVB
0
Rejoignez-nous