Ir para conteúdo
Fórum Script Brasil
  • 0

3D Flip com AS3


Henrique Flausino

Pergunta

Olá.

Pessoal estou precisando de uma ajuda.

Tenho um arquivo que faz um flip entre duas páginas, porém preciso adcionar mais e não sei como.

Veja o código abaixo.

AS3:

import Classes.Flip;

var cm:ContextMenu = new ContextMenu();
cm.hideBuiltInItems();
contextMenu = cm;

var flipped:Boolean = false;
var secondView:SecondView = new SecondView();
var flip:Flip;

function callFlip(e:MouseEvent):void
{
    if (! flipped)
    {
        flip  = new Flip(mainView, secondView, 2, "left", true);
        addChild(flip);
        flipped = true;
    }
    else if (flipped)
    {
        flip = new Flip(secondView, mainView, 2, "left", true);
        addChild(flip);
        flipped = false;
    }
}

mainView.infoButton.addEventListener(MouseEvent.MOUSE_DOWN, callFlip);
secondView.doneButton.addEventListener(MouseEvent.MOUSE_DOWN, callFlip);
Da Class
package Classes
{

    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import fl.transitions.easing.Strong;

    import flash.display.*;
    import flash.utils.Timer;
    import flash.events.*;

    public class Flip extends Sprite
    {

        private var firstView:DisplayObject;
        private var secondView:DisplayObject;
        private var initFromSide:String;
        private var duration:int;
        private var flipTween:Tween;
        private var addSecondView:Boolean;
        private var added:Boolean = false;
        private var timer:Timer = new Timer(1);

        public function Flip(frontObject:DisplayObject, backObject:DisplayObject, timeInSeconds:int, flipFromSide:String, secondViewIsInLibrary:Boolean):void
        {
            firstView = frontObject;
            secondView = backObject;
            duration = timeInSeconds;
            initFromSide = flipFromSide;
            addSecondView = secondViewIsInLibrary;

            animateFirstView();
            timer.addEventListener(TimerEvent.TIMER, checkFlip);
        }

        private function animateFirstView():void
        {
            flipTween = new Tween(firstView,"scaleX",Strong.easeIn,1,0.5,duration/2,true);
            flipTween = new Tween(firstView,"scaleY",Strong.easeIn,1,0.5,duration/2,true);

            if (initFromSide == "left")
            {
                flipTween = new Tween(firstView,"rotationY",Strong.easeIn,0,90,duration / 2,true);
                timer.start();
            }
            else if (initFromSide == "right")
            {
                flipTween = new Tween(firstView,"rotationY",Strong.easeIn,0,-90,duration / 2,true);
                timer.start();
            }
        }

        private function checkFlip(e:TimerEvent):void
        {
            if (initFromSide == "left" && firstView.rotationY >= 90)
            {
                timer.stop();

                firstView.visible = false;

                if (addSecondView && ! added)
                {
                    secondView.x = firstView.x;
                    secondView.y = firstView.y;

                    addChild(secondView);
                    added = true;
                }
                else
                {
                    secondView.x = firstView.x;
                    secondView.y = firstView.y;
                }

                animateSecondView();
            }
            else if (initFromSide == "right" && firstView.rotationY <= -90)
            {
                timer.stop();

                firstView.visible = false;

                if (addSecondView && ! added)
                {
                    secondView.x = firstView.x;
                    secondView.y = firstView.y;

                    addChild(secondView);
                    added = true;
                }
                else
                {
                    secondView.x = firstView.x;
                    secondView.y = firstView.y;
                }

                animateSecondView();
            }
        }

        private function animateSecondView():void
        {
            flipTween = new Tween(secondView,"scaleX",Strong.easeOut,0.5,1,duration/2,true);
            flipTween = new Tween(secondView,"scaleY",Strong.easeOut,0.5,1,duration/2,true);

            if (initFromSide == "left")
            {
                flipTween = new Tween(secondView,"rotationY",Strong.easeOut,-90,0,duration / 2,true);
                firstView.visible = true;
            }
            else if (initFromSide == "right")
            {
                flipTween = new Tween(secondView,"rotationY",Strong.easeOut,90,0,duration / 2,true);
                firstView.visible = true;
            }
        }
    }
}

Será que alguém poderia me ajudar à colocar mais 1 página?

Grato pela atenção.

Henrique Flausino

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom ao meu ver você tem um código plenamente funcional mas não sabe ampliar o exemplo que lhe foi dado ?

Esse seu exemplo é um boolean, ou seja ele funciona em 0 e 1, realmente so vai funcionar duas páginas, mas da pra ver claramente como criar mais páginas com o comando da classe chamado" flip = new Flip(mainView, secondView, 2, "left", true);"

seria melhor com código fonte mas para criar mais poáginas basta usar o new flip;

aonde mainView e second view são os movieClips que vão aparecer nas páginas;

basta você ter uma array com os movieclips e você poderá fazer apaginação como por exemplo:

Temos 10 movieClips numa array e queremos fazer a paginação destes.

Para cada flip feito teremos na mainview e secondView as posições da matriz exemplo...

flip = new Flip(matrizMC[0], matrizMC[1], 2, "left", true);

flip = new Flip(matrizMC[2], matrizMC[3], 2, "left", true);

flip = new Flip(matrizMC[4], matrizMC[5], 2, "left", true);

flip = new Flip(matrizMC[6], matrizMC[7], 2, "left", true);

flip = new Flip(matrizMC[8], matrizMC[9], 2, "left", true);

sem o fonte só posso imaginar isso :)

obviamente você ão vai agrupar o código assim, pois senão so vai valer a ultima linha coma s ultimas páginasmas vcx deve fazer uma validação com um contador para saber em que posição(página) você se encontra para saber quais as proximas páginas e veririficar se já chegou na ultima página etc... etc... etc..............

espero ter ajudado

:)

Editado por Pooh
Link para o comentário
Compartilhar em outros sites

  • 0
Olá

aqui deu "Unexpect file Format"

reupa o zip ou passa o link do FLA

abraços !

Coloquei o arquivo novamente, caso precise acesse o FTP ftp://mfdesign.com.br

Usuário: scriptbrasil@mfdesign.com.br

Senha: scriptbrasil

Link para acesso HTTP à pasta

Já testei e funciona normalmente aqui, arquivo feito para CS4.

Att.

Henrique Flausino

Link para o comentário
Compartilhar em outros sites

  • 0

Olá garoto :)

Testei aqui e funcionou perfeitamente a nova lógica....

O script funciona da seguinte maneira, você informa na verdade o movieClip que está ATIVO no momento e por qual ele deve TROCAR.

Resumindo em ordem crescente é uma lógica 0-1,1-2,2-3,3-4,4-5 ....

você deve sempre repetir o ATIVO pois é uma referência.

como você fez um teste booleano ACTIVE|INACTIVE nunca vai passar de 2 opções meu caro....

não basta chamar o callFlip sem passar parâmetros o maximo que ele pode fazer é trocar de estado mesmo...

Vamos lá uma nova lógica pra vc

Mudando a função callflip:

var objAtual:DisplayObject;

function callFlip(obj:DisplayObject):void
{
    if (! objAtual)
    {
        
    objAtual = mainView;
        
    }else{
        flip  = new Flip(objAtual, obj, 2, "left", true);
        addChild(flip);
        flipped = true;
        objAtual = obj;
    }
}
Assim guardamos o objeto de FLIP atual em objAtual e caso ele não tenha sido definido ainda ele é nosso objeto default "mainView"; Para que funcione deves chamar agora por :
callFlip(secondView);
Dentro de uma função de evento...
mainView.infoButton.addEventListener(MouseEvent.MOUSE_DOWN, function(){callFlip(secondView)});

Procure estudar mais seu código e ver seu funcionamento

Boa sorte e bons Estudos

Abraços

OBS: testei com o TerceiroView e funcionou perfeitamente, basta você usar a função e passar por parâmetro quem será o mc a ser msotrado
Link para o comentário
Compartilhar em outros sites

  • 0
Olá garoto :)

Testei aqui e funcionou perfeitamente a nova lógica....

O script funciona da seguinte maneira, você informa na verdade o movieClip que está ATIVO no momento e por qual ele deve TROCAR.

Resumindo em ordem crescente é uma lógica 0-1,1-2,2-3,3-4,4-5 ....

você deve sempre repetir o ATIVO pois é uma referência.

como você fez um teste booleano ACTIVE|INACTIVE nunca vai passar de 2 opções meu caro....

não basta chamar o callFlip sem passar parâmetros o maximo que ele pode fazer é trocar de estado mesmo...

Vamos lá uma nova lógica pra vc

Mudando a função callflip:

var objAtual:DisplayObject;

function callFlip(obj:DisplayObject):void
{
    if (! objAtual)
    {
        
    objAtual = mainView;
        
    }else{
        flip  = new Flip(objAtual, obj, 2, "left", true);
        addChild(flip);
        flipped = true;
        objAtual = obj;
    }
}
Assim guardamos o objeto de FLIP atual em objAtual e caso ele não tenha sido definido ainda ele é nosso objeto default "mainView"; Para que funcione deves chamar agora por :
callFlip(secondView);
Dentro de uma função de evento...
mainView.infoButton.addEventListener(MouseEvent.MOUSE_DOWN, function(){callFlip(secondView)});

Procure estudar mais seu código e ver seu funcionamento

Boa sorte e bons Estudos

Abraços

OBS: testei com o TerceiroView e funcionou perfeitamente, basta você usar a função e passar por parâmetro quem será o mc a ser msotrado

Olá Pooh.

Muito obrigado pela ajuda, fiz alguns testes e aparentemente está ok.

Estou tentando aplicar esta opção mas não está indo.

Sempre me retorna o erro 1046: O tipo não foi encontrado ou não é uma constante de tempo de compilação: terceiroView.

Onde será que estou errando?

Revisei o código várias vezes e quando troco por secondView funciona normalmente.

Usando o assistente não me retorna nenhum erro, somente quando estou exportando.

Pode me ajudar?

Att.

Henrique Flausino

Editado por Henrique Flausino
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...