Zoom sur zone rectangulaire

Zoom sur zone rectangulaire - Flash/ActionScript - Programmation

Marsh Posté le 10-01-2006 à 17:48:58    

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)
 
;)

Reply

Marsh Posté le 10-01-2006 à 17:48:58   

Reply

Marsh Posté le 10-01-2006 à 18:04:53    

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


---------------
D3
Reply

Marsh Posté le 11-01-2006 à 11:11:49    

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 ;)

Reply

Marsh Posté le 11-01-2006 à 11:37:13    

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
Reply

Marsh Posté le 11-01-2006 à 11:57:28    

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 ;)

Reply

Marsh Posté le 15-05-2009 à 17:38:56    

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 !

Reply

Marsh Posté le 15-05-2009 à 18:11:19    

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.
Reply

Marsh Posté le 15-05-2009 à 18:37:35    

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.

Reply

Marsh Posté le 15-05-2009 à 23:47:46    

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.
Reply

Marsh Posté le 16-05-2009 à 22:44:47    

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

Reply

Marsh Posté le 16-05-2009 à 22:44:47   

Reply

Marsh Posté le 16-05-2009 à 23:11:02    

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.
Reply

Marsh Posté le 18-05-2009 à 10:57:02    

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. }

Reply

Marsh Posté le 18-05-2009 à 18:25:20    

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.
Reply

Marsh Posté le 18-05-2009 à 21:25:33    

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
Reply

Marsh Posté le 18-05-2009 à 23:02:28    

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.
Reply

Marsh Posté le 19-05-2009 à 09:17:02    

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 ?

Reply

Marsh Posté le 19-05-2009 à 09:25:01    

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.
Reply

Marsh Posté le 19-05-2009 à 09:47:04    

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
Reply

Marsh Posté le 20-05-2009 à 09:40:25    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed