|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Bonjour !
Dans le cadre du défi Pascal j'ai écrit un petit programme qui génère un labyrinthe et cherche un chemin d'un point à un autre. La recherche progresse par récursion. A l'entrée de la procédure je dessine un petit carré à la position courante, et à la sortie je l'efface, sauf si le point d'arrivée est atteint, auquel cas le programme s'arrête et laisse voir le chemin parcouru. Code :
J'ai écrit le même programme pour FreePascal avec l'unité WinGraph : il m'a suffi de mettre un Sleep() après le dessin du petit carré pour obtenir l'effet désiré (voir pièce jointe). Mais pour une animation Flash ça ne peut pas convenir, n'est-ce pas ? Comment vous y prendriez-vous pour faire une chose de ce genre avec FlashPascal ?
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Un exemple simple pour faciliter la discussion. Le programme dessine dix traits bleus en entrant dans la procédure, et il les redessine en vert en sortant ; mais on ne le voit pas.
J'ai déclaré une horloge mais pour le moment je ne sais pas quoi en faire. Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
Salut,
voici ce qu'il est possible de faire Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||
|
10
|
|
|
#4 |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Merci Paul pour cet exemple.
Donc, si je comprends bien, il faut que je repense ma procédure de recherche, qui au lieu de s'appeler elle-même serait appelée à répétition par la procédure onEnterFrame. C'est un exercice intéressant. Je ne vois pas encore trop comment faire mais je vais y réfléchir.
__________________
L'Art est long et le Temps est court. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
oui c'est ça en gros
je suppose que tu utilises une procédure récursive qui garde trace du dernier déplacement, le retour l'annule automatiquement. et bien tu dois garder cette information dans une variable d'état globale...probablement un tableau qui garde la trace des directions prises à la profondeur "n". C'est un array of de Record reprenant les variables locales de ta procédure et au lieu de faire un appel récursif tu passes à l'indexe suivant dans le tableau. dans un premier temps tu peux remplacer ton appel récursif par une boucle While, ensuite tu remplacera la boucle While par les appels successifs de onEnterFrame. Sous Delphi ça revient à OnIdle quand tu veux faire une tâche par étapes sans passer par un Thread secondaire...
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
10
|
|
|
#6 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
J'ai réussi !
Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
10
|
|
|
#7 |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Une version améliorée, qui se réinitialise automatiquement tant que le centre du labyrinthe n'a pas été atteint.
C'est curieux, l'animation ralentit au fur et à mesure.
__________________
L'Art est long et le Temps est court. |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
Citation:
ce doit être lié à la façon dont tu gère les carrés. je vois au moins deux façon de faire 1) créer un nouveau carré rouge à chaque étape 2) pour le retour, cacher les carrés en trop 3) réutiliser les carrés cachés en les déplaçant avant d'en créer de nouveau pour le chemin suivant ou encore créer des carrés dans toutes les cases, par défaut cacher les rouges et ne les afficher que quand c'est nécessaire.
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
|
00
|
|
|
#9 | |||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Citation:
Code :
![]() Par contre je ne sais comment réinitialiser tout. Est-ce que je peux "écraser" mes carrés en appelant de nouveau la méthode Create ?
__________________
L'Art est long et le Temps est court. |
|||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
regarde FlashMine, les cellules sont crées une fois pour toute et j'ai des fonctions de dessin pour en changer l'aspect.
Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Effectivement, il y a tout dans cet exemple.
__________________
L'Art est long et le Temps est court. |
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
Pas facile de mesurer l'impact sur la CPU car tu ne cherches qu'un seul chemin (Etude3d bouclait)
Et je ne comprend pas pourquoi tu interdis le ScaleMode...ton dernier exemple est relativement petit sur mon écran, alors j'ai naturellement tendance à passer le player en plein écran et je me retrouve avec la même chose au milieu d'une grande fenêtre vide sauf à change l'option par défaut "Afficher/100%" en "Afficher/Tout afficher".
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
|
|
#13 | ||||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 683 ![]() |
Citation:
Citation:
Pour mon labyrinthe en particulier, j'ai utilisé jusque ici des cases de 20 sur 20 (c'était tout ce qui pouvait tenir dans mon écran, en laissant la place pour la pièce mobile). Au départ je pensais mettre des choses dessus : il fallait de la place pour les dessins. Mais finalement je n'ai que des carrés : du coup les cases de 20 me paraissent grandes. Là ce sont des cases de 10. Pour la question que j'ai posée dans le titre, je crois qu'elle est résolue. La procédure récursive a été remplacée et l'animation est fluide (le code est tiré de FlashMine.fpr). Je posterai le code complet après le défi. Code :
__________________
L'Art est long et le Temps est court. |
||||
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 392 ![]() |
Super
je reste persuadé que les gens qui critiquent les performances de Flash qui bouffe toute la CPU font face à des applications développées de la mauvaise façon
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
Copyright © 2000-2013 - www.developpez.com