Messagerie


Plantage avec les boulces rapides (MMF2 )

Big_pimouss
dimanche 13 juillet 2014 à 16:44
Bonjour à tous ,
j'ai posté un message sur le forum de la clickteam , mais je vais le poster ici aussi ( je pense que c'est plus fréquenté ^^ )
Je rencontre un problème avec les boucles rapides : je vais reprendre le message que j'ai posté :


Je vais détaillé au plus possible mon problème (désolé pour la longueur ...).

Alors voila : je voudrais faire un petit moteur, qui me servira ultérieurement, ou l'on déplace un bloc sur une grille et lorsque l'on clique cela crée le bloc.
Mais je veux que cela détermine si cela les blocs "ferment" une zone .

ex : Lorsque c'est ouvert rien ne se passe ,



lorsqu'on ferme des bloc vert sont crée .



Mon soucis est lorsque la zone à tester est "petite" , aucun soucis . Dès que je veux faire un peu plus complexe ca me fait ça :




Pour le principe de fonctionnement :

J'ai un tableau de X cases par Y cases. rempli à 0, sauf les bord remplie à 1 .
La position des bloc rempli les cases du tableau avec la valeur 2.

A chaque création de bloc des boucles rapides interviennent .

Je réinitialise le tableau à 0, sauf les bords à 1 et les mur qui reste à 2. (boucles rapides qui test case par case)


Puis :

Je vérifie chaque case 1 à 1 ,

{ Si la case =0
Et
(case X-1=1) ou (case X+1=1) ou (case Y+1=1) ou (case Y-1=1)

Alors la case vérifié =1
"Compteur modif" =1}


On boucle jusqu'à ce que le tableau entier soit Vérifié, on remet le "compteur modif" à 0 et on re-boucle (Ceci pour être sur que toute les cases soit vérifié et juste pour toute les formes ) jusqu'à ce que le tableau soit entièrement lu sans modification .

Le principe est le suivant : si une case est entouré de mur , la case du tableau est entouré de valeur 2 , elle reste à 0 .

Je relance ensuite une boucle qui teste les cases du tableau 1 à 1

{ Si la case = 0
Alors on crée un bloc vert }


Et donc avec un tableau de 25 par 25 je ne rencontre aucun soucis . Par contre si j'augmente la taille : plantage .
De plus même sur un petit tableau , dès que je fais des formes un peu complexe : plantage .

Il semblerait que ce soit la lecture en continu du tableau qui me pose soucis ( j'ai fait quelques test, cela plante au moment des boucles rapide qui vérifie les cases) .

Quelqu'un saurait-il comment faire un grand nombre de boucles sans plantages ? (j'ai tester avec les "boucles rapides" mais aussi avec l'objet "fast loop", même résultat .)

Ci-joint le MFA .
Pièces jointes
Kloug
1497 messages
Fusion 2.5
dimanche 13 juillet 2014 à 21:40
Salut,

C'est normal parce que tu n'utilises pas la boucle rapide intégrée.

D'après mes souvenirs, l'extension bousille le projet.

Bienvenue au club.
Emmanuel
2412 messages
Fusion 2.5 Dev Fusion 2.5
Firefly Exporteur UWP Exporteur iOS Exporteur Android Exporteur HTML5 Fusion 2.5+
lundi 14 juillet 2014 à 10:32
Bonjour le problème c est que du utile une extension  qui et dépassé elle été utile dans la version de mmf 1.5.
comme dit kloug utils les boucle rapide intégrée.

a bientôt
Big_pimouss
lundi 14 juillet 2014 à 15:32
Tout d'abord, merci d'avoir prêté attention à mon message .

Mais comme je l'ai dit , j'ai essayer les 2 méthodes et les 2 font la même chose , si vous voulez ce soir je peux refaire le même MFA (pas moyen de remettre la main dessus ^^) avec les boucles rapides, cela donnera le même résultat .( en utilisant les boucles rapides intégré au logiciel . )


Kloug
1497 messages
Fusion 2.5
lundi 14 juillet 2014 à 17:34
Le mieux est d'utiliser la boucle rapide intégrée, de laisser tomber l'extension.

As tu été là?
http://www.game-corp.net/article-104-astuces-indispensables-pour-mmf2.html

Pour savoir où ça casse, activation pas à pas des boucles rapides.

Attention quand une boucle fait un "scan" continuellement.
Généralement c'est là que ça casse.
A toi de l'activer seulement quand c'est utile.
Cyberclic
664 messages
Fusion 2.5 Dev
Exporteur iOS Exporteur Android Exporteur HTML5
lundi 14 juillet 2014 à 21:19
C'est normal que ça plante, tu n'utilises pas les boucles correctement.
J'ai regardé vite fait ton code et j'y ai vu plusieurs erreurs :

1) Il faut lancer une fastloop sur un événement qui ne doit faire que ça et rien d'autre. (lignes 2 et 58)

2) On ne relance jamais une boucle qui est déjà en cours d’exécution (lignes 10, 19, 30 et 43)
Exemple : On loop #1 -> Start loop #1
Il faut réajuster la position de la loop en replaçant son itération (index) à 0 par exemple.

3) On n'utilise pas un compteur annexe mais l'index de la boucle pour que ça soit plus propre.

Pour info, c'est la ligne 19 qui fait planter ton code. Voir point 2.
Kloug
1497 messages
Fusion 2.5
mardi 15 juillet 2014 à 05:17
Cyberclic, tu es trop cool, tu ne pouvais pas laisser Big_pimouss un peu mariner...

Edit: Quand tu donnes trop vite la solution, je suis au chômage.
Big_pimouss
mardi 15 juillet 2014 à 15:00
Merci pour vos réponse je vais regarder ça !



Ouai dans ma tête c'étais pas une évidence . (enfin la c'est parce que c'est l'objet fast loop c'est ça ?)

[quote]3) On n'utilise pas un compteur annexe mais l'index de la boucle pour que ça soit plus propre.


En fait j'utilise des compteurs pour mieux m'y retrouver .

Mais logiquement ça ne devrait jamais marcher ? Or la ça marche de temps en temps ... c'est ça qui m'a rendu perplexe



Je n'était vraiment pas pressé de toute façon :D

@KLOUG :
Oui l'article je l'ai déjà lu, la mon MFA n'est pas optis ( et très sale ) , j'ai un MFA avec les groupe désactiver qui se réactive, mais le résultat est le même , j'ai voulu mettre un MFA épuré .

En fait j'ai utilisé la même chose que

[quote]*Upon Pressing "Space bar"
=Start loop "Ajout" 1 times

*On Loop "Ajout"
+Compteur1 < 3
=Add 1 to Counter "Compteur1"
=Start loop "Ajout" 1 times
=Add 2 to Counter "Compteur2"


Ainsi que ça

[quote]Notez bien une chose importante (visible dans ce premier exemple) : si MMF2 lance un Fast Loop au beau milieu d'une liste d'actions, il fera d'abord les actions du Fast Loop qu'il vient de lancer puis continuera avec les actions de la liste précédente. Ceci peut causer des problèmes d'appels récursifs infinis[/quote]
C'est pour ça que je met mes loop à la fin dans l'éditeur d'evenement .



Edit : j'ai retrouvé le bout de MFA avec les boucles integré , c'est la même chose donc je pense que les erreurs sont les mêmes
Pièces jointes
Kloug
1497 messages
Fusion 2.5
mardi 15 juillet 2014 à 19:58
"(enfin la c'est parce que c'est l'objet fast loop c'est ça ?)"

Non pas vraiment si tu fais cela avec la boucle rapide intégrée...

"En fait j'utilise des compteurs pour mieux m'y retrouver ."

A une époque le lien proposé m'avait aidé à capter que les boucles rapides s'utilisent avec parcimonie.

Depuis j'ai mis au point une méthode, le pas à pas.

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.

Je ne pense pas que cela t'apporte quelque chose, maintenant que Cyberclic a souligné tes faux pas...

http://comptoir-mmf.eu/Forum/index.php?topic=787.msg4624#msg4624

Le système est propre à chaque cliqueur, donc à toi de vérifier que tout se passe comme prévu, quand tu lances une boucle, et quand tu l'arrêtes.

Désolé, je ne vais pas te faire un corrigé.

Bon courage pour la suite.

A+
Big_pimouss
mardi 15 juillet 2014 à 20:27
Ok merci, je vais regarder tout ça ( le "pas à pas" j'ai essayer, mais justement je ne trouvais pas de quoi venais le plantage, d'ou ce post ) .

En fait le truc c'est que je ne comprend pas pourquoi ca plante "aléatoirement", je pensais que si cela venais de mon code , j'aurais un plantage systématique .

[quote]Désolé, je ne vais pas te faire un corrigé.[/quote]
C'était pas le but ^^

Je vais tout modifié , y a juste un truc qui me chiffonne ,besoin d'être éclairé sur un truc :
vous êtes 2 à me dire qu'il ne faut pas qu'une boucle lance une boucle ( on loot 1 + condition  => start loot 1) . Or dans l'exemple que tu ma donnée => http://www.game-corp.net/article-104-astuces-indispensables-pour-mmf2.html) ils disent bien de faire ça .

C'est donc à proscrire cette méthode ?
Big_pimouss
mardi 15 juillet 2014 à 21:03
Bon j'ai complétement modifié la structure , finis les "on loot => start loot " .

Et ça focntionne  :sonic

Merci à vous !!! ( j'aurais jamais trouvé tout seul  :-\ )
Kloug
1497 messages
Fusion 2.5
mardi 15 juillet 2014 à 22:51
Pour ma part qu'une boucle rapide lance une autre boucle rapide, cela n'a pas de sens.

Dans ce cas pourquoi, ne pas arrêter aussi une boucle rapide à l'aide d'une autre boucle rapide?

Il s'agit d'une traduction, avons nous toutes les subtilités de l'auteur?

Big_pimouss
mardi 15 juillet 2014 à 23:37
Bin ça dépend de comment tu vois les choses , pour quelqu'un qui a moins l'habitude que toi des logiciel click ( comme moi par exemple :D) , je vois les choses comme ça :

La boucle se lance => le dernier événement est une relance
On relance la boucle => le dernier événement est une relance ... jusqu'à un événement donné ("tant que" dans d'autre langage de programmation par exemple ) c'est l'idée que j'ai de l'itération .

Car la je suis obligé de calculé moi même le nombre de boucle rapide, ce qui me paraissait pas du tout logique puisqu'il n'y a pas de récursivité (j'aurais su, j'aurais fait ça depuis le début ).

En tout cas je verrai les boucles rapides sous un autre angle , et c'est cool . Encore merci à vous.

PS : c'est à moi de mettre résolu dans le titre ou à un admin ?
Utilisateurs en ligne
  • Aucun utilisateur en ligne
  • 26 visiteurs au total

Derniers messages