Bonjour,
Dans le cadre d'un projet d'étude je dois réaliser une petite application FLASH. Je me suis lancé dans un truc qui me semblait au départ pas trop compliqué mais je me rends compte que ça dépasse un peu (voir beaucoup) mes capacités en Action Script (je suis étudiant). Ainsi, après des dizaines d'heures passées à chercher sur le net, dans divers forums et autres tutoriels, je fais appel à vous.
Voici l'idée : Réaliser une fonction de zoom sur une image présente sur une base de données (pour le moment en local sur mon poste via Easy-php). Pour ce faire, voici comment j'ai opéré :
Je charge l'image dans un clip en faisant appel à ma feuille php :
Bon, là c'était pour des tests... j'ai rentré le chemin de mon image dans le champ "adresse mail" de la table "administrateur" de la base qui a comme nom "Granville".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php mysql_connect("localhost","root",""); mysql_select_db("granville"); $req="SELECT adresse_mail FROM Administrateur where login ='admin'"; $rep=mysql_query($req); $res=mysql_fetch_array($rep); $adresse_mail=$res['adresse_mail']; echo utf8_encode("&image=$adresse_mail"); ?>
Pour faire la fonction de zoom, je voudrais donc dupliquer le premier clip qui accueil cette image, charger la meme image dans ce second clip mais lui donner une échelle 2 fois plus grande.
Le second clip sera décallé en x pour pouvoir voir la grande image et la petite image.
Déjà, à ce niveau ça me pose un problème car la première image s'affiche, mais pas la seconde. Je me suis dit que ça devait être un problème d'écouteur de chargement? Alors j'ai essayé de mettre deux champs supllémentaire dans mon flash : un premier qui affiche le poids de la première image en ko et un second qui affiche le pourcentage qui est chargé. J'ai essayé de dire au second clip de charger l'image une fois seulement que l'image du premier clip a été bien chargé (donc pourcentage chargé = 100%) mais ça ne marche pas...
Déjà, si j'arrive à afficher ces 2 images dans mes 2 clips, ce serait plutot bien !
Après, on arrive à la fonction de loupe à proprement parlé.
Donc, là, j'ai importé un symbole clip appellé "loupe" sur ma scène, et j'ai mis comme code dessus :
Donc, lorsque l'utilisateur clic sur cette loupe, elle peut se déplacer sur la première image (la petite, dans le clip1).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 on (press) {startDrag (this,true, 100, 120, 224, 224 ):} on (release) {stopDrag () }
Pour que la grande image se déplace en fonction du déplacement de la loupe, j'ai mis comme code sur mon clip2 (qui accueil la grande image) :
Donc, on a alors un déplacement de la grande image proportionnelement à la première. Et puisque cette image est deux fois plus grande que la première, l'utilisateur aura donc l'impression de déplacer une loupe sur la première image...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 onClipEvent (enterFrame) { clip2._x=(root.loupe._x)*-1; clip2._y=(root.loupe._y)*-1; }
Bon, j'sais pas si je me suis bien fais comprendre...
Je vous mets mon code FLASH ici :
Donc voilà... Au final j'arrive à quoi moi dans tout ça? Eh bien j'arrive à afficher dans mon navigateur (je passe par localhost et j'appelle ma feuille html qui contient l'objet flash) : le premier clip contenant l'image, sa taille, et 100% chargé. dessus j'ai bien mon objet loupe, que je peux déplacer sur l'image. Or, seul les contour de mon clip 2 s'affiche, l'image ne se charge pas dedans...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 //Creation d'une variable de chargement var chargement = new LoadVars(); //On place les clip1 et 2 en fonction de leur coordonnées x et y : clip1._x = 100; clip1._y = 120; clip1._width=250; clip1._height=250; clip2._x = 450; clip2._y = 120; clip2._width=500; clip2._height=500; //pour le chargement : se reporter au fichier info.php chargement.load("info.php"); //on charge la valeur de "image" chargement.onLoad = function(pSuc) { if (pSuc) { //Chargement de l'image dans le clip1 : clip1.loadMovie(this.image); //on affiche dans les champs de texte dynamique : le nb de bit total et le pourcentage de bit chargé : _root.onEnterFrame = function(){ total.text = clip1.getBytesTotal()+" ko"; charge.text = clip1.getBytesLoaded()+" ko"; pourcent.text = Math.floor((clip1.getBytesLoaded()/clip1.getBytesTotal())*100) + " %"; //Si le pourcentage chargé à la première image est égal à 100%: if (pourcent.text == "100 %"){ this.onEnterFrame = null; //Alors on peut commencer le chargement de la même image dans le clip2 : chargement.onLoad = function(pSuc2) { if (pSuc2) { clip2.loadMovie(this.image);} } } } } }
C'est peut être un problème de syntaxe? de listener obligatoire dans ce cas?(si oui pouvez vous me dire où le mettre je n'y arrive vraiment pas car l'image est chargée via la base ...)
l'imprim écran de mon résultat est en pièce jointe:
J'ai joins également une autre pièce jointe qui s'appelle "résultat_loupe" et qui vous donne un aperçu de ce que je voudrais obtenir :
(désolé ça pixelise pas mal)
Vous avez également en pièces jointes : mon FLA. et le SWF (info2) et un fichier qui s'appelle "loupe.SWF" qui est ce que je voudrais obtenir...
Merci pour votre aide je desespère grave et j'ai le cerveau en ébulition depuis deux semaines...
pps : voici au cas où le contenu de mafeuille html :
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <HTML> <head> </head> <body> <object type="application/x-shockwave-flash" data="info2.swf" width="800px" height="425px"> <param name="movie" value="info2.swf" /> </object> </body> </html>
Partager