Pergunta

Todos vocês sabem: "Clique com o botão direito do mouse -> zoom dentro ou fora" No arquivo flash, bem, eu preciso fazer isso, mas usando, por exemplo, clicando em um botão.

Isso é possível usando apenas código AS3?

THX!

Foi útil?

Solução

Você deve colocar todos os seus gráficos em um sprite, por exemplo, "cena" e depois modificar sua escala ...

Outras dicas

Não tão longe quanto o que sei. Curioso para ver outras respostas.

Uma coisa que vem à mente é que você pode usar o JavaScript para controlar uma div, contendo seu SWF para que a div fique grande (amplie o zoom), mas seja exibido no mesmo retângulo 'rollrect'. Você chamaria a função JavaScript para fazer isso usando o ExternalInterface.

Um teste rápido que eu fiz usando o componente de rolagem do 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();
}

Então eu notei que você está usando o Flex, então certamente deve haver um contêiner AA que permitirá uma funcionalidade semelhante.

HTH, George

Eu também usaria Scalex e Scaley, mas simplesmente com um número em vez da solução de George com um VAR. Então, algo como

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

Você pode tropeçar em outro obstáculo, que é que a imagem é escalada de e para o canto superior esquerdo. Nesse caso, tente mover a imagem com a escala. Curti

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

Na verdade, se você deseja dimensionar/zoomin/zoom um objeto de estágio ou vídeo ou qualquer outra coisa, multiplique e divida devem ser usados. Assim (foi o que eu usei quando precisava criar a funcionalidade Zoomin/Zoomout para câmera da web - Zoom digital, é claro, usando a funcionalidade de escala):

Assuma isso:


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

Agora você usa isso anexando essas funções aos seus botões:


zoom('in');
zoom('out'); 
zoom('reset'); // reset zoom
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top