Bonjour
J'ai récemment essayer de créer un script en AS3 permettant de faire un zoom sur une carte vectorielle (ou toute autre image). J'ai réussi a créer un cadre selon le clic pour définir l'endroit a zoomer et a redéfinir la taille de la carte selon.
Néanmoins je n'arrive pas a recentrer la carte après redimensionnement par rapport au centre du rectangle tracé
voici mon code:
// Définition du conteneur graphique
var monDessin:Shape = new Shape();
// Définition des variables contenant la position de la souris au moment de la pression du bouton de la souris
var Xbase:Number = new Number;
var Ybase:Number = new Number;
var Xfin:Number = new Number;
var Yfin:Number = new Number;
// Ajout du conteneur a la liste d'affichage
addChild ( monDessin );
// Ajout du premier écouteur pour la pression du bouton de la souris
stage.addEventListener (MouseEvent.MOUSE_DOWN,mousedown);
// Déclaration de la fonction associé à l'intant de la pression du bouton de la souris
function mousedown (pEvt:MouseEvent)
{
// Affectation du style au futur tracé
monDessin.graphics.lineStyle ( 1, 0x000000, 1 );
// Suppression de l'écouteur de cette fonction
pEvt.target.removeEventListener (MouseEvent.MOUSE_DOWN,mousedown);
// Affectation des variables contenant la position de la souris
Xbase = pEvt.stageX;
Ybase = pEvt.stageY;
// Ajout de l'écouteur associer au mouvement de la souris
pEvt.target.addEventListener (MouseEvent.MOUSE_MOVE,dessin);
// Ajout de l'écouteur associer à l'intant du relachement de la pression du bouton de la souris
pEvt.target.addEventListener (MouseEvent.MOUSE_UP,mouseup);
}
// Déclaration de la fonction associé au mouvement de la souris
function dessin (pEvt:MouseEvent)
{
// Suppresion de l'ancien tracé
monDessin.graphics.clear ();
monDessin.graphics.lineStyle ( 1, 0x000000, 1 );
monDessin.graphics.moveTo ( Xbase, Ybase );
monDessin.graphics.lineTo ( Xbase, pEvt.stageY );
monDessin.graphics.lineTo ( pEvt.stageX, pEvt.stageY );
monDessin.graphics.lineTo ( pEvt.stageX, Ybase );
monDessin.graphics.lineTo ( Xbase, Ybase );
pEvt.updateAfterEvent ();
}
function mouseup (pEvt:MouseEvent)
{
pEvt.target.removeEventListener (MouseEvent.MOUSE_UP,mouseup);
pEvt.target.removeEventListener (MouseEvent.MOUSE_MOVE,dessin);
pEvt.target.addEventListener (MouseEvent.MOUSE_DOWN,mousedown);
Xfin = pEvt.stageX
Yfin = pEvt.stageY
trace(fond.scaleX);
fond.scaleX = 1/(Math.abs(Xbase-Xfin)/stage.width);
fond.scaleY = 1/(Math.abs(Ybase-Yfin)/stage.height);
monDessin.graphics.clear ();
pEvt.updateAfterEvent();
}