Accueil > > > 3 ZOOMS DIFFERENTS D'UN SPRITE AVEC LA MOLETTE [AS3]
3 ZOOMS DIFFERENTS D'UN SPRITE AVEC LA MOLETTE [AS3]
Information sur la source
Description
MAJ : Vu les premiers commentaires, j'ai hésité à retirer mon message... qui n'avait pas vraiment été lu. Bref, afin de proposer un truc plus complet, voici une petite mise à jour qui ne correspond plus à ma problématique, mais qui donne une petite présentation de 3 fonctions de zoom à la molette sur un sprite - zoom classique avec la propriété scaleX et scaleY - zoom à partir du centre du sprite - zoom par rapport à la position du curseur par rapport au sprite, point intéressant puisque il faut bien faire attention à être dans le même système de coordonnées ! Ne faisant pas de flash, il doit certainement me manquer des éléments faisant partie de la "philosophie Flash" (utilisation de stage à la place ? pas trop regarder à quoi cela servait, par exemple). ps: j'étais parti sur l'utilisation de addChildAt afin de pouvoir importer un SWF contenant des boutons et de le mettre sous le SWF principal, tout en accordant la propagation des événements souris à ce SWF avec "conteneur.mouseChildren = true;" edit: le but étant d'obtenir un zoom sur le curseur comme la plupart des outils de CAO MESSAGE DE DEPART : Ma problématique de départ : Avoir un plan sous Illustrator où certaines formes devaient pouvoir être cliquable, et accessoirement, pouvoir se déplacer de manière intuitive dans le plan. C'est ce second point que je présente ici. La solution mise en place consiste à utiliser 3 fichiers SWF, de dimensions identiques : - un conteneur - le fichier SWF de l'exportation pour le web à partir d'Illustrator, moins les formes devant être cliquables - le fichier SWF sous Flash réalisé avec un copier/coller (sur place, pour conserver le positionnement) des zones devant être cliquables. Ces formes ont été converties en bouton, avec un Listener à base de switch sur le nom des instances de boutons. Bref, je ne présente que la source du conteneur pour le moment (par manque de temps).
Source
- import flash.display.Sprite;
- import flash.events.MouseEvent;
-
- stop();
-
- //
- // Création d'un Sprite conteneur
- // Création d'un Sprite rectangle afin de pouvoir tout le temps déplacé le sprite conteneur
- //
- var conteneur:Sprite = new Sprite();
- conteneur.name = "conteneur";
- this.addChild(conteneur);
-
- var rect:Sprite = new Sprite();
- rect.graphics.beginFill(0xF0F0F0);
- rect.graphics.drawRect(0,0,842,595);
- rect.buttonMode = false; // afin de garder le curseur de la souris et non la main
-
- //
- // Chargement des logos
- //
- var request_FK:URLRequest = new URLRequest("logoflash.png");
- var logoFK:Loader = new Loader();
- logoFK.load(request_FK);
-
- var request_CS:URLRequest = new URLRequest("logocs.png");
- var logoCS:Loader = new Loader();
- logoCS.load(request_CS);
-
- var request_VB:URLRequest = new URLRequest("logovb.png");
- var logoVB:Loader = new Loader();
- logoVB.load(request_VB);
-
- var request_ASP:URLRequest = new URLRequest("logoasp.png");
- var logoASP:Loader = new Loader();
- logoASP.load(request_ASP);
-
- var request_CPP:URLRequest = new URLRequest("logocpp.png");
- var logoCPP:Loader = new Loader();
- logoCPP.load(request_CPP);
-
- var request_CFM:URLRequest = new URLRequest("logoCFM.png");
- var logoCFM:Loader = new Loader();
- logoCFM.load(request_CFM);
-
- //
- // Ajout des éléments au Sprite conteneur
- //
- conteneur.addChildAt(rect,0);
- conteneur.addChildAt(logoFK,1);
- conteneur.addChildAt(logoCS,2);
- conteneur.addChildAt(logoVB,3);
- conteneur.addChildAt(logoASP,4);
- conteneur.addChildAt(logoCPP,5);
- conteneur.addChildAt(logoCFM,6);
-
- //
- // Positionnement des logos
- //
- logoCS.x = 240; logoCS.y = 0;
- logoVB.x = 480; logoVB.y = 0;
- logoASP.x = 0; logoASP.y = 90;
- logoCPP.x = 240; logoCPP.y = 90;
- logoCFM.x = 480; logoCFM.y = 90;
-
- //
- // Cacher le menu de base afin de ne pas avoir la possibilité de zoomer sur le flash lui-même !
- //
- var menu:ContextMenu = new ContextMenu();
- menu.hideBuiltInItems();
- conteneur.contextMenu = menu;
-
- //
- // Définition des variables, temporaires ou non
- //
- var tempX = conteneur.x; // position du point de transformation avant redimensionnement
- var tempY = conteneur.y; // position du point de transformation avant redimensionnement
- var tempW = conteneur.width; // largeur du conteneur avant redimensionnement
- var tempH = conteneur.height; // hauteur du conteneur avant redimensionnement
- var resultW = conteneur.width; // largeur obtenue par le redimensionnement
- var resultH = conteneur.height; // hauteur obtenue par le redimensionnement
- var ratio = 1.1; // définition du ratio fixe pour le zoom
- // Attention : il est valable sur les dimensions d'origine du sprite conteneur
-
-
- //
- // Gestion des événements souris afin de déplacer/zoomer le conteneur
- //
- conteneur.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
- function mouseDown(event:MouseEvent):void {
- conteneur.startDrag();
- }
-
- conteneur.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
- function mouseReleased(event:MouseEvent):void {
- conteneur.stopDrag();
- // Puisque l'utilisateur a déplacé le conteneur, il faut redéfinir la position du point de transformation (l'angle supérieur gauche)
- tempX = conteneur.x;
- tempY = conteneur.y;
- }
-
- conteneur.addEventListener(MouseEvent.MOUSE_WHEEL, zoomCentre);
- function zoom(e:MouseEvent):void
- {
- if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
- {
- conteneur.scaleX *= 1.1;
- conteneur.scaleY *= 1.1;
- }
- else //delta < 0 lorsque la molette va vers l'arrière : agrandissement
- {
- conteneur.scaleX /= 1.1;
- conteneur.scaleY /= 1.1;
- }
- }
- function zoomCentre(e:MouseEvent):void // Zoom sur le centre du conteneur, quelque soit sa position
- {
- if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
- {
- conteneur.width /= ratio;
- conteneur.height /= ratio;
- }
- else //delta < 0 lorsque la molette va vers l'arrière : agrandissement
- {
- conteneur.width *= ratio;
- conteneur.height *= ratio;
- }
- conteneur.x += (tempW-conteneur.width)/2;
- conteneur.y += (tempH-conteneur.height)/2;
- tempX = conteneur.x;
- tempY = conteneur.y;
- tempW = conteneur.width;
- tempH = conteneur.height;
- }
-
- function zoomCurseur(e:MouseEvent):void // Zoom sur la position du curseur, quelque soit la position du conteneur
- {
- if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
- {
- conteneur.width /= ratio;
- conteneur.height /= ratio;
- }
- else //delta < 0 lorsque la molette va vers l'arriere : agrandissement
- {
- conteneur.width *= ratio;
- conteneur.height *= ratio;
- }
- conteneur.x += (tempW-conteneur.width)/(tempW/(conteneur.parent.mouseX-tempX));
- conteneur.y += (tempH-conteneur.height)/(tempH/(conteneur.parent.mouseY-tempY));
- tempX = conteneur.x;
- tempY = conteneur.y;
- tempW = conteneur.width;
- tempH = conteneur.height;
- }
import flash.display.Sprite;
import flash.events.MouseEvent;
stop();
//
// Création d'un Sprite conteneur
// Création d'un Sprite rectangle afin de pouvoir tout le temps déplacé le sprite conteneur
//
var conteneur:Sprite = new Sprite();
conteneur.name = "conteneur";
this.addChild(conteneur);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0xF0F0F0);
rect.graphics.drawRect(0,0,842,595);
rect.buttonMode = false; // afin de garder le curseur de la souris et non la main
//
// Chargement des logos
//
var request_FK:URLRequest = new URLRequest("logoflash.png");
var logoFK:Loader = new Loader();
logoFK.load(request_FK);
var request_CS:URLRequest = new URLRequest("logocs.png");
var logoCS:Loader = new Loader();
logoCS.load(request_CS);
var request_VB:URLRequest = new URLRequest("logovb.png");
var logoVB:Loader = new Loader();
logoVB.load(request_VB);
var request_ASP:URLRequest = new URLRequest("logoasp.png");
var logoASP:Loader = new Loader();
logoASP.load(request_ASP);
var request_CPP:URLRequest = new URLRequest("logocpp.png");
var logoCPP:Loader = new Loader();
logoCPP.load(request_CPP);
var request_CFM:URLRequest = new URLRequest("logoCFM.png");
var logoCFM:Loader = new Loader();
logoCFM.load(request_CFM);
//
// Ajout des éléments au Sprite conteneur
//
conteneur.addChildAt(rect,0);
conteneur.addChildAt(logoFK,1);
conteneur.addChildAt(logoCS,2);
conteneur.addChildAt(logoVB,3);
conteneur.addChildAt(logoASP,4);
conteneur.addChildAt(logoCPP,5);
conteneur.addChildAt(logoCFM,6);
//
// Positionnement des logos
//
logoCS.x = 240; logoCS.y = 0;
logoVB.x = 480; logoVB.y = 0;
logoASP.x = 0; logoASP.y = 90;
logoCPP.x = 240; logoCPP.y = 90;
logoCFM.x = 480; logoCFM.y = 90;
//
// Cacher le menu de base afin de ne pas avoir la possibilité de zoomer sur le flash lui-même !
//
var menu:ContextMenu = new ContextMenu();
menu.hideBuiltInItems();
conteneur.contextMenu = menu;
//
// Définition des variables, temporaires ou non
//
var tempX = conteneur.x; // position du point de transformation avant redimensionnement
var tempY = conteneur.y; // position du point de transformation avant redimensionnement
var tempW = conteneur.width; // largeur du conteneur avant redimensionnement
var tempH = conteneur.height; // hauteur du conteneur avant redimensionnement
var resultW = conteneur.width; // largeur obtenue par le redimensionnement
var resultH = conteneur.height; // hauteur obtenue par le redimensionnement
var ratio = 1.1; // définition du ratio fixe pour le zoom
// Attention : il est valable sur les dimensions d'origine du sprite conteneur
//
// Gestion des événements souris afin de déplacer/zoomer le conteneur
//
conteneur.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
function mouseDown(event:MouseEvent):void {
conteneur.startDrag();
}
conteneur.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
function mouseReleased(event:MouseEvent):void {
conteneur.stopDrag();
// Puisque l'utilisateur a déplacé le conteneur, il faut redéfinir la position du point de transformation (l'angle supérieur gauche)
tempX = conteneur.x;
tempY = conteneur.y;
}
conteneur.addEventListener(MouseEvent.MOUSE_WHEEL, zoomCentre);
function zoom(e:MouseEvent):void
{
if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
{
conteneur.scaleX *= 1.1;
conteneur.scaleY *= 1.1;
}
else //delta < 0 lorsque la molette va vers l'arrière : agrandissement
{
conteneur.scaleX /= 1.1;
conteneur.scaleY /= 1.1;
}
}
function zoomCentre(e:MouseEvent):void // Zoom sur le centre du conteneur, quelque soit sa position
{
if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
{
conteneur.width /= ratio;
conteneur.height /= ratio;
}
else //delta < 0 lorsque la molette va vers l'arrière : agrandissement
{
conteneur.width *= ratio;
conteneur.height *= ratio;
}
conteneur.x += (tempW-conteneur.width)/2;
conteneur.y += (tempH-conteneur.height)/2;
tempX = conteneur.x;
tempY = conteneur.y;
tempW = conteneur.width;
tempH = conteneur.height;
}
function zoomCurseur(e:MouseEvent):void // Zoom sur la position du curseur, quelque soit la position du conteneur
{
if (e.delta > 0) //delta > 0 lorsque la molette va vers l'avant : réduction
{
conteneur.width /= ratio;
conteneur.height /= ratio;
}
else //delta < 0 lorsque la molette va vers l'arriere : agrandissement
{
conteneur.width *= ratio;
conteneur.height *= ratio;
}
conteneur.x += (tempW-conteneur.width)/(tempW/(conteneur.parent.mouseX-tempX));
conteneur.y += (tempH-conteneur.height)/(tempH/(conteneur.parent.mouseY-tempY));
tempX = conteneur.x;
tempY = conteneur.y;
tempW = conteneur.width;
tempH = conteneur.height;
}
Conclusion
A faire : - définir des limites - définir des niveaux de zoom (si besoin) - réaliser une autre fonction zoomExtraSoft qui aura des transitions fluides sur les étapes de MouseEvent.MOUSE_WHEEL
A comprendre : - pourquoi sous MacOS X.5 avec Safari ou Firefox et une mighty mouse, cela ne fonctionne pas de tout...
Historique
- 17 mai 2009 15:07:54 :
- Source complète et modifiée pour correspondre à une explication des zooms et non à la réponse à ma problématique.
- 17 mai 2009 15:18:04 :
- - changement du titre
- explication du zoom sur le curseur, cela permet d'obtenir un zoom comme dans la plupart des outils de CAO
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
problème lors de l'enregistrement ou déplacement du projet, erreur 1014 [ par tom099 ]
Bonjour à tous et toutes!petit soucis incompréhensible : je télécharge régulièrement des sources à droite à gauche que j'étudie par la suiteje suis pa
Zoom sur map + déplacement [ par grunge_1 ]
Salut a vous tous! Je fait un site en temps que stagière pour un zonning industriel et c'est la première foi que je bricole quelque choses avec action
Déplacement / Zoom dans une scène [ par foruma ]
Bonjour !Je n'arrive pas à trouver comment faire pour fabriquer la navigation de mon site.Je suis nul en AS et je ne trouve rien que je ne comprend su
Zoom/dézoom avec déplacement et variateur [ par cesarion ]
C'est encore moi et ma carte ...Tout d'abord, je suis content, mon zoom et mon déplacement sur la carte fonctionne (si si voir : http:
besoin aide btn effet zoom code à 1 message erreur [ par zicomoun ]
<span style="COLOR: #000033; FONT-FAMILY
Flash 9 / AS3 + Socket MySQL question [ par _benjy ]
Salut @ tous...Bon j'imgine que certain d'entre vous sont au courant de la publication de Flash 9 Alpha. Perso je l'ai recup av hier, et autant le dir
fonction zoom (sur clic droit) [ par kodiask ]
voilà je voulais juste savoir. sous window en faisant clic droit sur une animation flash il y'a a "zoom avant" une fonction pour agrandir l'animation
Pivoter et zoom d'une photo ! [ par NaNouk_X ]
Bonjour, je suis un vrai débutant en flash !je voudrais faire une petite animation qui donnerait l'effet de voir une photo partir du fond de l'écran e
déplacement [ par biene ]
Bonjour,Je cherche un moyen de faire déplacer une carte faite en trois images vectorielles avec illustrator grâce à des flèches sur le côté et en plaç
Action script ? [ par MarkASH ]
Bonjour,je suis nouveau,j'vais pas vous raconter ma life,mais j'aime travaillé sur flash.Je cherche le code as qui zoom + et qui zoom -Merci.
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE
Forum
RE : PROBLEME RE : PROBLEME par docodoc
Cliquez pour lire la suite par docodoc
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
Comparez les prix

HTC Magic
Entre 429€ et 429€
|