Messagerie


Gestion des boucles avec Fusion [Résolu]

Poum
mercredi 18 janvier 2017 à 10:42
Bonjour @tous

Ma demande concerne cette fois les boucles.

J’ai plusieurs copies d’un objet actif qui entrent en interaction avec mon personnage.
Lors de la création du premier objet, tout fonctionne parfaitement.
Une fois copié, n’ayant pas envie de dupliquer mon code autant de fois que de copie (ce n’est pas bien), j’ai décidé d’utiliser les boucles.

Une belle introduction aux boucles de Fusion en somme.  ;)

Si la boucle tient sur une ligne, cela se passe sans accros, j’en ai déjà fait l’expérience.
Or, cette fois, mon code tient sur 9 lignes.

J’ai cherché, en vain, afin de délimiter une boucle (indiquer le début de la boucle sur une ligne, et sa fin sur une autre ligne).
Ainsi, j’ai choisi de créer autant de boucles que de ligne de code et les appeler toutes.



Devinez quoi ? Ca ne fonctionne pas.  ???

Ma question est : ma démarche est-elle bonne ?
Si non, comment résoudre ce genre de problèmes ?
Si oui, je dois chercher pourquoi ça ne fonctionne pas.

Merci pour vos réponses.


Seyjin
1471 messages
Fusion 2.5 Dev
Exporteur Android Exporteur HTML5 Fusion 2.5+
mercredi 18 janvier 2017 à 11:37
Tu aurais un exemple à nous montrer ? Là je suis perplexe quand à l'utilisation de plusieurs boucles.
Poum
mercredi 18 janvier 2017 à 12:13

Tu aurais un exemple à nous montrer ? Là je suis perplexe quand à l'utilisation de plusieurs boucles.


Mon projet est trop lourd mais j'ai construit ici un petit exemple.
Il fonctionne exactement de la même manière que mon projet.

http://dl.free.fr/n1qd4MVMU

Évidement, dans cet exemple on a pas besoin de boucle car il n'y a aucun calcul sur chaque objet. C'est juste pour montrer l'exemple.

Cela dit, si tu es perplexe, c'est que ça ne te parle pas. Alors, comment boucler sur plusieurs lignes ?
volgot
mercredi 18 janvier 2017 à 13:06
C'est quoi ton but en fait ?
Lors d'une collision détruire le fantôme, c'est ça ?
Poum
mercredi 18 janvier 2017 à 13:10

C'est quoi ton but en fait ?
Lors d'une collision détruire le fantôme, c'est ça ?


Oui tout à fait.
Comme je le souligne plus haut, on a pas besoin de boucle pour ce test mais c'est une manière d'illustrer ma problématique.

Le but dans ce test étant de détruire les fantômes, un à un, en utilisant plusieurs boucles (ou une boucle englobant les deux dernières lignes).
volgot
mercredi 18 janvier 2017 à 13:10
Je viens de regarder ton exemple.
Si le but est de détruire ton fantôme, pas besoin de boucles.
Et si tu veux un truc dans le genre : faire clignoter et lui enlever des points de vie. Idem pas besoin de boucles, tu utiliseras les valeurs modifs du fantôme et le tour est joué ;)



Edit : je vois pas pourquoi utiliser une boucle si ce n'est pas nécessaire, c'est contre-productif. Ou alors tu veux un truc spécial qui le justifie, mais faut que tu précises...
volgot
mercredi 18 janvier 2017 à 13:16
Une petite chose importante :
Il ne faut pas confondre les boucles classiques (= boucles for) avec les boucles liées aux objets (= boucles for each).
Dans ton exemple tu lances une boucle for each et tu l'appelles avec une boucle for ; ça peut pas marcher.
Pour appeler ta boucle for each, il faut que dans ta condition tu passes par l'objet "Méchant" et non par l'objet "Conditions spéciales"
Poum
mercredi 18 janvier 2017 à 13:28

Dans ton exemple tu lances une boucle for each et tu l'appelles avec une boucle for ; ça peut pas marcher.


Euuuh, je confond ?
Ce n'est pas une boucle For Eatch qui est appelée (à savoir pour chaque objet)  ?



Edit : Je viens de percuter. Ce n'est pas l'appel qui n'est pas bon mais la boucle en elle même.
Je viens de tester et c'est tout bon. Au temps pour moi concernant l'exemple qui était bancal  :P
Mais, en regardant le premier post, je pense que l'appel et la boucle sont OK. Non ?


Edit : je vois pas pourquoi utiliser une boucle si ce n'est pas nécessaire, c'est contre-productif. Ou alors tu veux un truc spécial qui le justifie, mais faut que tu précises...


Comme le disais plus haut, oui, je n'ai pas besoin de boucle ici mais c'est juste pour illustrer un problème plus complexe qui n'a pas d’intérêt à être développé ici :-)
volgot
mercredi 18 janvier 2017 à 14:01
Oui sur ton 1er post en effet ce sont bien des boucles for each donc c'est good sur la forme.

Après pour ce que tu veux vraiment faire... c'est un peu flou.
Ce qui est surprenant c'est d'avoir autant de boucles. C'est possible que tu aies besoin de tout ça mais à vue de nez ça paraît vraiment bcp...
Poum
mercredi 18 janvier 2017 à 14:11

Après pour ce que tu veux vraiment faire... c'est un peu flou.
Ce qui est surprenant c'est d'avoir autant de boucles. C'est possible que tu aies besoin de tout ça mais à vue de nez ça paraît vraiment bcp...


Pour être moins dans le flou, il s'agit de la gestion d'une presse.



Elle reste un certain temps en position haute.
Elle descend rapidement.
Elle patiente en bas.
Puis remonte lentement.
J'ai la gestion des collisions avec son plateau.
Mais aussi, on peut passer au dessus du plateau quand la presse est en bas.
Je dois aussi gérer si on se fait écraser mais également, si on ne se retrouve pas coincé en tentant de passer quand la presse remonte.
Enfin, gérer les sons. On ne les entend qu'en s'en approchant.

Bref, 9 lignes pour tout ça. Je n'ai pas trouvé moyen de faire plus court  ;D



Dans l'absolu, la gestion des déplacements des presses ne demande pas de boucle. C'est pour les collisions que ça devient indispensable.
Etant obligé de travailler avec les données de la presse (Eatch), je dois donc les inclure dans mes boucles.
Seyjin
1471 messages
Fusion 2.5 Dev
Exporteur Android Exporteur HTML5 Fusion 2.5+
mercredi 18 janvier 2017 à 14:27
Tu n'as pas besoin de faire pleins de boucles, une seule suffit.
Pièces jointes
denisstephane
mercredi 18 janvier 2017 à 14:37
Pourquoi tu n'utilise pas plutot les qualifiers.
Ca te permet de n'avoir qu'une portion de condition pour tout les objets avec ces qualifiers.
Tu met toutes tes copies du piston sur un qualifier et tu remplace les pistons dans tes conditions par le qualifier.
Ca fonctionnera aussi bien et sur des clones,pas sur des objets dupliquer.
Dans l'exemple de ton fichier c'est different.Puisque ton objet fantome est dupliquer et non cloner,ta condition n'a pas besoin de boucles.
Quand la collision se produit entre le pacman et le fantome,chaque objet toucher est detruit sans affecter les autres,mais une seule condition suffit.Pas besoin de boucle ni de qualifier cette fois-ci.
Ton exemple pour des objets dupliquer:
https://mega.nz/#!4p9V0BSQ!8Ox7JJJ9bAl6hoYQcI6JtnpETh9y5-Zfj6QGaeFVPOw
Le même avec des copies et un qualifier:
https://mega.nz/#!MklRBSrR!Ht4mtExSiGuqZxz69cMRz34bArNQmpTz379bgtljcB4
Poum
mercredi 18 janvier 2017 à 14:51

Tu n'as pas besoin de faire pleins de boucles, une seule suffit.


Ah oui ? On peut donc appeler une seule fois et nommer plusieurs boucles avec le même ID ?

J'ai modifié mon code et ... ca ne fonctionne pas.
Pis, certains mouvement sont doublé. Comme si il y avait eu deux appels.
Puis, la gestion des collisions passe à l'as  :(

Je commence à fumer du ciboulot là :D



Pourquoi tu n'utilise pas plutot les qualifiers.
Ca te permet de n'avoir qu'une portion de condition pour tout les objets avec ces qualifiers.
Tu met toutes tes copies du piston sur un qualifier et tu remplace les pistons dans tes conditions par le qualifier.
Ca fonctionnera aussi bien et sur des clones,pas sur des objets dupliquer.
Dans l'exemple de ton fichier c'est different.Puisque ton objet fantome est dupliquer et non cloner,ta condition n'a pas besoin de boucles.
Quand la collision se produit entre le pacman et le fantome,chaque objet toucher est detruit sans affecter les autres,mais une seule condition suffit.Pas besoin de boucle ni de qualifier cette fois-ci.
Ton exemple pour des objets dupliquer:


Je n'ai pas pensé au qualifieurs mais à vrai dire, je n'ai pas bien compris.
Puis, dans ton exemple, tu les as dupliqué et non cloné. C'est exactement ce que m'avait proposé Seyjin juste au dessus.
denisstephane
mercredi 18 janvier 2017 à 14:57
Non,le deuxieme exemple est fait avec des clone,regarde bien.
Les objets dupliquer ne peuvent avoir qu'un nom identique pour chaque objet,pas les clones qui sont tous bien distinctes.Tout les fantomes ici sont different.
Mais le fait de leurs coller un qualifier permet de ne faire qu'une seule liste de condition pour tout les objets,au lieu de faire une boucle ou de recopier a chaque fois les conditions.
En gros c'est la même chose pour tes pistons,tu fait tes copies et tu les met tout avec le même qualifier.
Ensuite tu fait tes conditions,sans boucle.Toutes tes conditions devront être faite sur le qualifier et non sur l'objet.
Le qualifier est une etiquette que tu colle sur tout les objets qui en ont besoins.Cette etiquette indique a multimedia fusion que tes conditions s'appliqueront aux objets qui ont cette etiquette.Donc tu fait tes conditions sur l'etiquette et pas sur l'objet,de facon a ce que MMF2 sache qu'il doit repercuter ces conditions sur chaque objet cloner qui a cette etiquette.
Poum
mercredi 18 janvier 2017 à 15:51

...


J'ai le piston et la plateforme.
Je gérais les deux séparément.

En passant par les qualifieurs, j'ai donc tout modifié (en me plantant quelques fois au passage,  la main tremblante) et tout changer.
Baaaah, ça marche, je me fais bien écrabouiller par les deux presses (dupliquées) pour mes tests  :bravos
Bon, ça a engendré un bug mais je devrais m'en sortir.

Merci 1.000 fois pour vos conseils avisés et votre patience.


Cela dit, les topics sur les boucles sont rares. J'espère que celui-ci sera utile à d'autres car, mine de rien, on y a évoqué pas mal de choses.
denisstephane
mercredi 18 janvier 2017 à 15:52
Oui,y a pas de toute,il sera surement utile plus tard pour d'autres personnes. ;)
Seyjin
1471 messages
Fusion 2.5 Dev
Exporteur Android Exporteur HTML5 Fusion 2.5+
mercredi 18 janvier 2017 à 16:31

Ah oui ? On peut donc appeler une seule fois et nommer plusieurs boucles avec le même ID ?

Non, c'est une seule boucle, avec des conditions différentes. Mais ça, ça n'a rien à voire avec ton problème.

Enfin ça donne apparemment un indice. Tu as peut être des événements qui entre en conflit.
Kloug
1497 messages
Fusion 2.5
mercredi 18 janvier 2017 à 19:30
Salut,

MDR, avec CTF au début on pense que tout se règle à grands coups de programmation.

La boucle rapide est une "spécialité" klik and Play 2, à utiliser avec parcimonie.
http://comptoir-mmf.eu/Forum/index.php?topic=787.msg4624#msg4624

A+++

Édit:

© Éviter la boucle rapide fantomatique. ©

© Lancer et arrêter correctement une boucle rapide réclame un minimum de jugeote. ©

© Quand on est sûr de rien, le mieux est de trouver un moyen de ralentir la boucle, afin de vérifier où en est l'index via un compteur. ©
Utilisateurs en ligne
  • Aucun utilisateur en ligne
  • 16 visiteurs au total

Derniers messages