2010-04-07 6 views
3

vous savez tous: "clic droit -> zoom avant ou arrière" dans le fichier flash, eh bien, je dois le faire, mais en utilisant, par exemple, en cliquant sur un bouton. Est-ce possible en utilisant uniquement le code AS3?Zoom avant et arrière en utilisant AS3

Thx!

Répondre

1

vous devez mettre tous vos graphiques dans un sprite, par exemple « scène », puis modifier son échelle ...

+0

Ouais .. qui a fonctionné dans Flex mais ... Je n'utilise toujours pas le zoom Flash natif. Je me demande s'il y a un moyen de l'utiliser, pour le moment je vais utiliser cette solution, thx. – Artemix

0

Pas aussi loin que je le sais. Curieux de voir d'autres réponses cependant.

Une chose hacky qui vient à l'esprit est, vous pourriez peut-être utiliser javascript pour contrôler un div contenant votre swf de sorte que la div devient grand (zoom avant), mais est affiché dans le même rectangle « scrollRect ». vous appelez la fonction javascript pour cela en utilisant ExternalInterface.

Un test quick'n'dirty Je n'utilisant le composant ScrollPane du flash:

//zoomIn,zoomOut = button 
//sp = scrollPane, scrollDrag = true 
zoomIn.addEventListener(MouseEvent.CLICK, zoom); 
zoomOut.addEventListener(MouseEvent.CLICK, zoom); 

function zoom(event:MouseEvent) { 
    var scale:Number = event.currentTarget == zoomIn ? 1 : -1; 
    sp.content.scaleX += scale; 
    sp.content.scaleY += scale; 
    sp.update(); 
} 

Je l'ai remarqué que vous utilisez flex, donc il doit sûrement y être un récipient qui vous permettra une fonctionnalité similaire.

HTH, George

+0

Thx George, je vais essayer. – Artemix

0

J'utiliser scaleX et scaleY aussi, mais simplement avec un nombre au lieu de la solution de George avec un var. Donc, quelque chose comme

zoomInButton.addEventListener(MouseEvent.MOUSE_DOWN, zoomIn); 
zoomOutButton.addEventListener(MouseEvent.MOUSE_DOWN, zoomOut); 

function zoomIn(e:MouseEvent) { 
    //actions for zoom-in function 
    myPicture.scaleX += 10; 
    myPicture.scaleY += 10; 
} 
function zoomOut(e:MouseEvent) { 
    //actions for zoom-out function 
    myPicture.scaleX += 10; 
    myPicture.scaleY += 10; 
} 

Vous pourriez tomber sur un autre obstacle mais, ce qui est que l'image se mis à l'échelle de et vers le coin supérieur gauche. Dans ce cas, essayez de déplacer l'image avec la mise à l'échelle. Comme

function zoomIn(e:MouseEvent) { 
    //actions for zoom-in function 
    myPicture.scaleX += 10; 
    myPicture.scaleY += 10; 
    myPicture.x -= 5; 
    myPicture.y -= 5; 
} 
0

En fait, si vous voulez à l'échelle/zoomin/zoomout une étape ou d'un objet vidéo ou quoi que ce soit d'autre, multiplier et diviser devrait être utilisé à la place. Comme cela (ce que je quand je avais besoin pour créer zoomin/fonctionnalité zoomout pour caméra web - zoom numérique bien sûr en utilisant la fonctionnalité à l'échelle):

On suppose que:


video_width = 640; 
video_height = 480; 

stage.scaleMode  = StageScaleMode.NO_SCALE; 
stage.align   = StageAlign.TOP_LEFT; 
stage.stageWidth = video_width; 
stage.stageHeight = video_height; 


camera = Camera.getCamera(); 
// some other params 

video = new Video(video_width, video_height); 
video.attachCamera(camera); 
addChild(video); 

// to mirror webcam output: 
video.scaleX = -1; 
video.scaleY = 1; 
video.x = video_width; 
video.y = 0; 


public function zoom(action:String = 'reset') 
{ 
     var step = 1.1, // adjust this multiplyer for faster zoom. Eg. 1.2, 1.5, etc. 
      x_offset = 0, 
      y_offset = 0; 

    if (action == 'in') 
    { 
     video.scaleX *= step; 
     video.scaleY *= step; 

     x_offset = (stage.stageWidth - video.width)/2; 
     y_offset = (stage.stageHeight - video.height)/2; 
       // to center video object on stage by X if mirror effect is used 
     video.x = stage.stageWidth - x_offset; 
       // to center video object on stage by X - no mirror 
       // video.x = x_offset; 
     video.y = y_offset; // to center video object on stage by Y 
    } 
    else if (action == 'out') 
    { 
      video.scaleX /= step; 
     video.scaleY /= step; 

     x_offset = (stage.stageWidth - video.width)/2; 
     y_offset = (stage.stageHeight - video.height)/2; 
     video.x = stage.stageWidth - x_offset; 
     video.y = y_offset; 
    } 
    else 
    { 
       // need to be mirrored 
     video.scaleX = -1; 
       // no mirror 
       // video.scaleX = 1; 
     video.scaleY = 1; 
       // if mirror video output 
     video.x = stage.stageWidth; 
       // no mirroring used 
       // video.x = 0; 
     video.y = 0; 
    }  
} 

Maintenant vous utilisez ce en attachant cela fonctionne à vos boutons:


zoom('in'); 
zoom('out'); 
zoom('reset'); // reset zoom 
Questions connexes