Messagerie


Comment restreindre une condition ?

rainzo
6 messages
Fusion 2.5 Dev
Firefly Exporteur Android Fusion 2.5+
dimanche 17 décembre 2023 à 11:35

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"

Hydrill
97 messages
Fusion 2.5 Dev
Exporteur iOS Exporteur Android
dimanche 17 décembre 2023 à 23:36


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 ;) )

Patrice
2784 messages
Fusion 2.5 Dev Fusion 2.5
Firefly Exporteur UWP Exporteur iOS Exporteur Android Exporteur HTML5 Fusion 2.5+
lundi 18 décembre 2023 à 17:01

 L'nterrupteur : Si press espace alors valeur=1-valeur

rainzo
6 messages
Fusion 2.5 Dev
Firefly Exporteur Android Fusion 2.5+
lundi 18 décembre 2023 à 17:29

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) ^^'



rainzo
6 messages
Fusion 2.5 Dev
Firefly Exporteur Android Fusion 2.5+
lundi 18 décembre 2023 à 17:31
Ce message a été supprimé
fredetmumu
1385 messages

mercredi 3 janvier 2024 à 11:02

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

Yazorius
200 messages
Fusion 2.5 Dev
Firefly Exporteur UWP Exporteur iOS Exporteur Android Exporteur HTML5
lundi 8 janvier 2024 à 10:11

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)

Pièces jointes
fredetmumu
1385 messages

samedi 13 janvier 2024 à 13:55

ah oui c'est bien plus simple

anthonyp
34 messages
Fusion 2.5 Dev Fusion 2.5
mercredi 17 janvier 2024 à 23:41

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

_______________________________________________________________


Voilà c'était pour exposer une autre situation d'un problème qui est souvent rencontré quand on crée un jeu et qu'on veux résoudre un problème de logique avec la direction que doit prendre le joueur si l'utilisateur appuie sur gauche et droite en même temps. Si ça peux te donner une idée de comment séparer et organiser ça mieux.


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.



Pit73
1055 messages
Fusion 2.5 Dev
Exporteur iOS Exporteur Android Exporteur HTML5
mercredi 24 janvier 2024 à 09:52

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 ;) 

Utilisateurs en ligne
  • Aucun utilisateur en ligne
  • 38 visiteurs au total

Derniers messages