Bonjour,
Si j'ai en ligne 1 :
condition > le joueur appuye sur "Espace" et valeur modifiable 0=0
effet > direction de l'actif vers la gauche + fixer valeur modifiable 0 à 1
ligne 2 :
condition > le joueur appuye sur "Espace" et valeur modifiable 0=1
effet > direction de l'actif vers la droite + fixer valeur modifiable à 0
Comment faire pour que le programme n'active pas les 2 lignes en même temps ?
Restreindre et limiter l'action si l'event boucle ne fonctionnent pas vu que c'est deux lignes différentes.
je fait ceci pour résoudre le problème mais c'est embêtant de devoir ajouter une ligne et une valeur globale (ou modifiable, le résultat est pareil) pour ça
ligne 1 :
condition > le joueur appuye sur "Espace" + valeur modifiable 0=0 + valeur globale "delai">0
effet > direction de l'actif vers la gauche + fixer valeur modifiable 0 à 1 + fixer valeur globale "delai" à 0
ligne 2 :
condition > le joueur appuye sur "Espace" et valeur modifiable 0=1+ valeur globale "delai">0
effet > direction de l'actif vers la droite + fixer valeur modifiable à 0 + fixer valeur globale "delai" à 0
ligne 3:
tous les 1 seconde > ajouter 1 à valeur globale "delai"
Salut Rainzo,
Tu vas bien?
J'ai eu plein de fois le même soucis et coincidence j'ai contourné le problème exactement comme toi, en mettant un delai! ;)
J'espère que quelqu'un nous apportera une solution plus simple. Si tu trouve par toi même n'hésite pas à poster la technique ici!
( ou nous la faire en tuto ;) )
L'nterrupteur : Si press espace alors valeur=1-valeur
Je ne comprend pas Patrice.
Tu ne fixe pas la valeur ?
ou tu fixes la valeur à 1-valeur à la place de la fixer à 1 directement ? mais si valeur vaut 0 de base, sur la ligne 1 on obtiens 1 (1-0) et sur la ligne 2 on obtiens 1-1=0
Ca revient à fixer la valeur à 1 et à 0
et j'ai testé, ca ne change rien au problème, le personnage monte dans la voiture puis ressort immédiatement (je me base sur l'exemple de mon dernier tuto) ^^'
le meilleur moyen c'est ca pour moi:
si space et VAL A =0 ET VAL B=0
: gauche , VAL A=1 , VAL B=1
------------------
*si space et VAL A=1 ET VAL B=0
: droite , VAL A=0 VAL B=1
-------------------------
si PAS space
: VAL B = 0
la valeur b redevient a zero seuelement quand tu aura relaché space et les 2 premieres conditions seront de nouveau possibles
Le soucis est que tu crées une situation est valable à chaque boucle du programme.
J'ai déjà rencontré une telle situation à mes débuts, et il m'a toujours fallu me dépatouiller avec une valeur en plus, comme tu l'as fait.
Depuis, j'utilise les "drapeaux" qui m'ont sorti de l'embarras, en oubliant complètement l'ancienne façon de faire.
Si appui sur Espace -> inverse drapeau 0
Si drapeau 0 = ON -> direction droite
Si drapeau 0 = OFF -> direction gauche
(inverser les directions gauche-droite, si tu veux que la direction de départ soit droite)
ah oui c'est bien plus simple
Comment faire pour que le programme n'active pas les 2 lignes en même temps ?
____________________________________________
j'ai rencontré ce problème à l'époque quand j'essayais de programmer des jeux de plateforme et que je voulais faire tenir le personnage dans la direction voulue sans qu'il n'ait une direction privilégiées quand le joueur appuyait maladroitement sur Gauche et Droite en même temps c'est peut être un peu ce genre de soucis que tu veux résoudre. : )
Dans ton cas l'instruction écrite la plus basse sera prioritaire sur l'instruction plus en haut du coup c'est elle qui aura le dernier mot dans ton programme. Fusion fonctionne un peu comme ça dans la logique :
Instruction 1
Instruction 2
Affichage de l'écran
Le programme recommence :
Instruction 1
Instruction 2
Affichage de l'écran etc....
Du coup c'est ton instruction numéro 2 qui aura le dernier mot.
Pour résoudre ce problème il faut le résoudre comme à expliqué Yaozrius c'est à dire utiliser un drapeau.
Les drapeau sont binaire , soit Oui, soit Non du coup il n'y à pas d’ambiguïté possible.
Une autre manière aussi c'est de penser ton joueur avec une "machine à Etats"
Avoir une portion du code qui s'occupe exclusivement de surveiller la direction dans laquelle se trouve ton joueur. Et de l'autre une portion du code qui s'occupe uniquement de savoir si ton joueur doit bouger ou ne doit pas bouger. Et si tu veux allez plus loin tu peux même utilisé une Chaine de Caractère qui s'occupe de gérer les différents états de ton joueur "Doit ouvrir la porte / Marche / Immobile / Parle / Ouvre Porte " :
__________________________________________________________
Si appuie vers ==> et N'appuie pas vers <== Alors : MouvementDu Joueur = 1
___________________________________________________________
Si appuie vers <== et N'appuie pas vers ==> Alors : MouvementDu Joueur = -1
___________________________________________________________
Si appuie vers <== et sur ==> en même temps Alors: MouvementDuJoueur = 0
___________________________________________________________
Si N'appuie vers <== et N'appuie pas sur ==> Alors: MouvementDu Joueur = 0
______________________________________________________________
Ca c'est pour dire dire quel etat tu veux. Ce qui est bien avec ce procédé c'est que MouvementDu Joueur = 0
et bein l'utilisateur aura beau appuyer sur la touche Gauche et Droite en même temps ce sera la dernière fois que la variable MouvementDu Joueur était sur -1 ou 1 qui restera intacte.
______________________________________________________________
Si MouvementDuJoueur = 1 Alors: DirectionDuJoueur = "Vers la Droite"
Si MouvementDuJoueur = - 1 Alors: DirectionDuJoueur = "Vers la Gauche"
_________________________________________________________
Et ensuite seulement tu peux dire quelle direction tu veux pour ton Actif.
__________________________________________________________
Si DirectionDuJoueur = "Vers la Droite" Alors ChangerDirection de ton Actif vers la Droite
________________________________________________________________
Si DirectionDuJoueur = "Vers la Droite" Alors ChangerDirection de ton Actif vers la Gauche
_______________________________________________________________
Et puis après si tu veux faire bouger le joueur :
Si MouvementDuJoueur = 1 Alors: faire bouger le joueur vers la Droite
Si
MouvementDuJoueur
= - 1 Alors: faire bouger le joueur vers la gauche
Si MouvementDuJoueur = 0 Alors: Faire s'arrêter le joueur "Il sera toujours orienté dans la bonne direction même à l'arrêt vu qu'on à séparé la logique en utilisant 2 variables qui n'ont pas le même rôle."
Si tu veux faire un personnage qui rentre dans une voiture, sort d'une voiture : n'hésite pas à utiliser une chaine de caractère qui s'occupera uniquement de gérer les états de ton joueur.
Si EtatDuJoueur ="Rentre dans Voiture" Alors Joue l'animation "RentreDansVoiture".
_________________________________________________
Si EtatDuJoueur ="SortDeVoiture" Alors Joue l'animation "SortDeVoiture".
_______________________________________________
Si EtatDuJoueur ="VoitureRoule" Alors Déplace la voiture
_______________________________________
Si EtatDuJoueur ="VoitureALarret" Alors Arrête la voiture.
Séparer la logique du code qui s'occupe des directions de ton joueur, de celle qui s'occupe des différents comportement de ton joueur.
Il y a beaucoup de maniere de faire, ou de creer
Je te conseille de faire des petits tests avec affichage a l'ecran des variables que tu testes, cela permet de comprendre.
La programmation c'est comme dans la vie, les conditions doivent etre claire pour realiser une action.
Il faut retenir :
Les lignes de codes sont lues de haut en bas, ligne apres ligne. Alors si tu dis :
maVariableCouleur = rouge
puis
maVariableCouleur = vert
ben elle va passer de rouge a vert tres rapidement mais les 2 seront executé.
Attention !! Tu dois aussi gérer le fait que la touche ai été lachée entre temps, donc nouvelle condition :)
maVariableCouleur = rouge "SI" elle etait verte ET la touche est relachée : tu limites le changement de couleur UNIQUEMENT dans une certaine condition.
Si ca peut eclairer ta lanterne ;)