Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1541 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Zoom sur zone rectangulaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Zoom sur zone rectangulaire

n°1280754
kiwi44
Posté le 10-01-2006 à 17:48:58  profilanswer
 

Bonjour,
 
Je cherche a faire un zoom sur une zone rectangulaire que g definie...
 
Je charge un swf externe dans un clip de mon anim principale et, ensuite, je zoom sur une partie du swf externe ou sur une autre...
 
je ne sais pas comment faire pour faire un zoom de mon rectangleafin qu il prenne le rectangle complet existant dans l anim principale et destine a l'anim secondaire... (j'espere que c un pau pres clair...:p)
 
Dans ma premiere anim, j ai un cadre qui contient l anim externe, et , a l interieur de cette anim je dois effectuer des zoom afin de faire prendre a mon rectangle de zoom la totalite de la place prevue dans l anim principale pour la secondaire...
 
Voila j espere que cela est clair...
 
MERCI BCP pour votre aide !
 
(j ai cherche toute l aprem sur le net mais rien de tres clair .. :s)
(je dispose de toutes les coordonnees x et y des 4 angles de mon rectangle)
 
;)

mood
Publicité
Posté le 10-01-2006 à 17:48:58  profilanswer
 

n°1280769
mechkurt
Posté le 10-01-2006 à 18:04:53  profilanswer
 

rien compris mais pour zoomer tu peux modifier le  _xscale et _yscale du conteneur de ton anim loadé...


---------------
D3
n°1281174
kiwi44
Posté le 11-01-2006 à 11:11:49  profilanswer
 

mechkurt a écrit :

rien compris mais pour zoomer tu peux modifier le  _xscale et _yscale du conteneur de ton anim loadé...


 
 
LoL, je m'en doutais ... :p
 
Je voulais juste savoir si on pouvais faire un zoom sur des coordonnees particulieres en Flash... tu lui files les 4 points de zoom et il cadre son zoom dessus en maximizant la zone demander a la taille totale reservee au clip ... 8-)
 
(En esperant que ca soit + clair ...)
 
Merci @ toi mechkurt ;)

n°1281187
mechkurt
Posté le 11-01-2006 à 11:37:13  profilanswer
 

mouais, je suis pas sur d'avoir plus compris que la fois d'avant mais pour eviter les post inutiles je vais essayer d'etre constructif:
1- tu calcule la largeur et la hauteur de ta zone de zoom (a l'aide de tes 4 points) puis tu divise la largeur obtenu par la hauteur, tu compares au ratio de ton anim principale (4/3 si tu est en resolution standard 1024x768, 800x600 ou 640x480).
2- si tu est au dessus c'est qu'il faudrat te baser sur la largeur de ton cadre de zoom pour calculer ton _xscale de l'anim loadé (regle de 3)
sinon tu utilise la hauteur pour calculer le _yscale
3- tu accorde le _yscale au _xscale (ou l'inverse)


---------------
D3
n°1281209
kiwi44
Posté le 11-01-2006 à 11:57:28  profilanswer
 

mechkurt a écrit :

mouais, je suis pas sur d'avoir plus compris que la fois d'avant mais pour eviter les post inutiles je vais essayer d'etre constructif:
1- tu calcule la largeur et la hauteur de ta zone de zoom (a l'aide de tes 4 points) puis tu divise la largeur obtenu par la hauteur, tu compares au ratio de ton anim principale (4/3 si tu est en resolution standard 1024x768, 800x600 ou 640x480).
2- si tu est au dessus c'est qu'il faudrat te baser sur la largeur de ton cadre de zoom pour calculer ton _xscale de l'anim loadé (regle de 3)
sinon tu utilise la hauteur pour calculer le _yscale
3- tu accorde le _yscale au _xscale (ou l'inverse)


 
 
Mon anim principale est en 655*380 et la zone de carte est de 450*300 :
 
sachant que la zone de la carte externe commence aux coordonnees : x : 5.5 pixels & y : 47.7 pixels
 
voici donc mon code :
 

Code :
  1. largeurZoom=xMaxChoixFlash - xMinChoixFlash;
  2. hauteurZoom=yMinChoixFlash - yMaxChoixFlash;
  3. ratio=largeurZoom/hauteurZoom;
  4. if(largeurZoom < hauteurZoom) {
  5.  largeurZoom=hauteurZoom;
  6. } else {
  7.  hauteurZoom=largeurZoom;
  8. }
  9. trace("largeurZoom : "+largeurZoom);
  10. trace("hauteurZoom : "+hauteurZoom);
  11. _root.zoomInitial(_root.carteCentrale);
  12. _root.carteCentrale._xscale +=largeurZoom*ratio;
  13. _root.carteCentrale._yscale +=hauteurZoom*ratio;
  14. _root.carteCentrale._x=_root.carteCentrale._x-xMinChoixFlash+5.5;
  15. _root.carteCentrale._y=_root.carteCentrale._y-yMaxChoixFlash+47.7;


 
8-) Merci de ton aide ;)

n°1885045
egr
Posté le 15-05-2009 à 17:38:56  profilanswer
 

Bonjour,
excusez-moi de déterrer ce vieux topic, mais j'aimerais convertir ce bout de code en AS3. Je cherche à faire la même chose (zoom sur une carte à partir d'un rectangle).
J'ai déjà la forme de mon rectangle (donc les coordonnées des 4 points), et j'ai essayé de faire la suite des calculs en AS3 mais le zoom s'effectue n'importe comment.
Je voudrais savoir :
 
- à quoi correspond cette ligne :
_root.zoomInitial(_root.carteCentrale);
 
- et s'il y a un équivalent de _root en AS3.
 
Merci de votre aide !

n°1885055
abais
Posté le 15-05-2009 à 18:11:19  profilanswer
 

Si tu parle du root en terme de conteneur, et donc de movieClip, l'équivelent de "_root" est "MovieClip(root)"...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885061
egr
Posté le 15-05-2009 à 18:37:35  profilanswer
 

Je ne sais pas de quoi je parle je débute... :(
Mais vu qu'il a mis des _root partout je me dis que c'est forcément important.

n°1885120
abais
Posté le 15-05-2009 à 23:47:46  profilanswer
 

root c'est la racine... la base du document...
"_root.machin", ça correspond à l'élement (variable, clip...) qui s'appel "machin" dans la racine du document


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885307
egr
Posté le 16-05-2009 à 22:44:47  profilanswer
 

Et donc c'est indispensable que je me serve de ça pour le transcrire en AS3 ?

mood
Publicité
Posté le 16-05-2009 à 22:44:47  profilanswer
 

n°1885309
abais
Posté le 16-05-2009 à 23:11:02  profilanswer
 

je te deconseille vivement de te lancer dans la conversion de ce script si tu ne comprend pas les bases...
Ici, le ROOT sert de referentiel au chemin de tes clip, c'est comme le parcours de dossier sur ton ordi... si un fichier n'est pas dans un dossier, soit tu dois faire repertoire precedent (parent dans flash), soit tu repars de la racine du HDD (root dans flash...)
Mais je crois que je parle dans le vide... nan ? parceque je vois pas comment tu es à même de comprendre le code si dessus si tu ne connais pas ces bases...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885605
egr
Posté le 18-05-2009 à 10:57:02  profilanswer
 

Merci pour toutes ces infos, c'est déjà un peu plus clair !
J'ai tenté de faire quelque chose, il y a un début de zoom mais il ne s'effectue pas de la bonne façon.
 
Voici le contenu de mon .as
 

Code :
  1. package
  2. {
  3. import flash.display.* ;
  4. import flash.events.* ;
  5. import flash.ui.* ;
  6. import flash.geom.* ;
  7. import flash.text.* ;
  8. public class test_as extends MovieClip
  9. {
  10.  public var cadre:Sprite = new Sprite();
  11.  public var largeur:Number = stage.stageWidth;
  12. public var hauteur:Number = stage.stageHeight;
  13.  public var mc:MovieClip;
  14.  public var zoneTexte:TextField ;
  15.  public var coordx:Number;
  16.  public var coordy:Number;
  17.  public var largeurzoom:Number ;
  18.  public var hauteurzoom:Number ;
  19.  public var ratio:Number;
  20.  public function test_as()
  21.  {
  22.   RectangleSelection (1.0, 0xFF0000, 1.0, 0x00FF00, 0.2) ;
  23.   mc = new map() ;
  24.   mc.x = largeur/2 ;
  25.   mc.y = hauteur/2 ;
  26.   addChild(mc);
  27.   zoneTexte = new TextField() ;
  28.   addChild(zoneTexte);
  29.  }
  30.  function RectangleSelection (epaisseurContour, couleurContour, alphaContour, couleurFond, alphaFond)
  31.  {
  32.   stage.addEventListener(MouseEvent.MOUSE_DOWN,startCadre);
  33.   stage.addEventListener(MouseEvent.MOUSE_UP,stopCadre);
  34.   function startCadre(event:MouseEvent):void
  35.   {
  36.    stage.addEventListener(MouseEvent.MOUSE_MOVE,resizeCadre);
  37.    cadre.x = mouseX;
  38.    cadre.y = mouseY;
  39.    resizeCadre(event);
  40.    addChild(cadre);
  41.   }
  42.   function stopCadre(event:MouseEvent):void
  43.   {
  44.    stage.removeEventListener(MouseEvent.MOUSE_MOVE,resizeCadre);
  45.    removeChild(cadre);
  46.    mc.scaleX += largeurzoom * ratio;
  47.    mc.scaleY += hauteurzoom * ratio;
  48.    mc.x = mc.x-coordx+largeur/2;
  49.    mc.y = mc.y-coordy+hauteur/2;
  50.   }
  51.   function resizeCadre(event:MouseEvent):void
  52.   {
  53.    cadre.graphics.clear();
  54.    cadre.graphics.lineStyle(epaisseurContour, couleurContour, alphaContour);
  55.    cadre.graphics.beginFill(couleurFond, alphaFond);
  56.    cadre.graphics.moveTo(0, 0);
  57.    cadre.graphics.lineTo(0, cadre.mouseY);
  58.    cadre.graphics.lineTo(cadre.mouseX, cadre.mouseY);
  59.    cadre.graphics.lineTo(cadre.mouseX, 0);
  60.    cadre.graphics.lineTo(0, 0);
  61.    cadre.graphics.endFill();
  62.    event.updateAfterEvent();
  63.    coordx = mouseX;
  64.    coordy = mouseY;
  65.    largeurzoom = cadre.mouseX;
  66.    hauteurzoom = cadre.mouseY;
  67.    ratio = largeurzoom/hauteurzoom ;
  68.    zoneTexte.text = "X = " + coordx + "\n" +
  69.         "Y = " + coordy + "\n" +
  70.         "largeurzoom = " + largeurzoom + "\n" +
  71.         "hauteurzoom = " + hauteurzoom + "\n" +
  72.         "Ratio = " + ratio ;
  73.    if (largeurzoom < hauteurzoom) largeurzoom = hauteurzoom ;
  74.    else hauteurzoom = largeurzoom ;
  75.   }
  76.  }
  77. }
  78. }

n°1885809
abais
Posté le 18-05-2009 à 18:25:20  profilanswer
 

On ne sais pas trop ce que tu cherche à faire, et tu nous met pas la portion de code adéquate (tout balancer comme ça c'est très déroutant !)...
Dis quel est le problème, ce qu'il fait au lieu de quoi...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885850
egr
Posté le 18-05-2009 à 21:25:33  profilanswer
 

Ce que je cherche à faire c'est un zoom à partir d'un rectangle. En gros, sur une carte, si on trace un rectangle sur Paris par exemple, on zoom pour n'afficher que la zone sélectionnée (en l'occurrence Paris).
 
J'ai mis le code entier pour pouvoir tester, car on ne peut pas importer de fichiers, et surtout parce que l'erreur pourrait venir d'ailleurs.
 
Les bouts de code qui sont intéressants sont :
 
- dans la fonction stopCadre :
 

Code :
  1. mc.scaleX += largeurzoom * ratio;
  2. mc.scaleY += hauteurzoom * ratio;
  3. mc.x = mc.x-coordx+largeur/2;
  4. mc.y = mc.y-coordy+hauteur/2;


 
 
- et dans la fonction resizeCadre :
 

Code :
  1. coordx = mouseX;
  2. coordy = mouseY;
  3. largeurzoom = cadre.mouseX;
  4. hauteurzoom = cadre.mouseY;
  5. ratio = largeurzoom/hauteurzoom ;
  6. if (largeurzoom < hauteurzoom) largeurzoom = hauteurzoom ;
  7. else hauteurzoom = largeurzoom ;


 
 
Et le résultat obtenu est plus qu'étrange (assez indescriptible), quand je fais un petit rectangle normalement ça devrait zoomer à fond pour m'afficher une petite portion de carte, et quand je fais un énorme rectangle ça devrait à peine zoomer pour m'afficher une grande portion de carte. Là ça fait l'inverse et je ne comprends pas pourquoi.


Message édité par egr le 18-05-2009 à 21:28:03
n°1885877
abais
Posté le 18-05-2009 à 23:02:28  profilanswer
 

Remplace
 
mc.scaleX += largeurzoom * ratio;
mc.scaleY += hauteurzoom * ratio;
 
par
 
mc.scaleX += (mc.width - largeurzoom) * ratio;
mc.scaleY += (mc.height- hauteurzoom) * ratio;
 
ça me parait plus logique, je me goure peut-etre, je suis trop fatigué pour trop réfléchir...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885928
egr
Posté le 19-05-2009 à 09:17:02  profilanswer
 

C'est vrai que ça parait plus logique mais ça ne marche pas non plus :(
Il n'y a aucun moyen de vous importer ne serait-ce qu'un .swf pour que vous vous rendiez compte ?

n°1885936
abais
Posté le 19-05-2009 à 09:25:01  profilanswer
 

bah, il en existe 100...
Par exemple, mettre sur un FTP le .fla zippé...
ou utiliser le service http://dl.free.fr et nous donner l'url qui te donneront pour ton fichier...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°1885954
egr
Posté le 19-05-2009 à 09:47:04  profilanswer
 

Oui je connais ce genre de site mais peut-être qu'il y aurait eu moyen de le transférer directement par hardware.
Bref voici le fichier zip : http://dl.free.fr/u062CZMuu


Message édité par egr le 19-05-2009 à 09:47:30
n°1886349
egr
Posté le 20-05-2009 à 09:40:25  profilanswer
 

Personne d'autre ne peut m'aider ? :(


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  Zoom sur zone rectangulaire

 

Sujets relatifs
HELP probleme pour un script d'export de zone DNSzone "déplaçable"
Nombre maximum de caractère zone de textephp : définir une '"zone critique" du script ?
Changer le style de la police dans une zone de texte[Javascript - css ] Zone de selection dans un zoom image
Zoom sur survol d'image[SQL/Access] Problème de rafraichissement de zone de liste
Controler le zoom camescope 
Plus de sujets relatifs à : Zoom sur zone rectangulaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR