Flash: startDrag() e stopDrag()

Aproveitando o post anterior sobre uma div arrastável usando Javascript. Vamos ver agora como seria feito uma janela também arrastável só que no Flash.

Primeiro de tudo é desenharmos nossa janela, ela será divida da seguinte maneira:

janela (MovieClip Principal)
|– barra;
|– minimax;
|– fechar;
\– conteudo.

Use as ferramentas de desenho para construir a janela, mas deixe os desenhos separados como mostrado acima. Se você ainda não está familiarizado leia este post primeiro.

A minha janela ficou assim:

Desenho da Janela

Aonde cada parte (desenho) é um MovieClip diferente, para transformar o seu desenho em MovieClip selecione ele aperte F8 coloque o nome do MC e verifique se o radiobutton MovieClip realmente está marcado.

Após criado o Movie devemos instanciâ-lo, para isso clique nele e vá na aba Propriedades (CTRL+F3), preencha o campo instância (siga os nomes definidos acima).

Com os quatros MovieClips prontos (barra, minimax, fechar e conteudo) selecione-os e aperte novamente F8 para transformá-los no nosso MC janela.

Caso você queira editar algum movie ou apenas posicionar melhor, dê um duplo clique nele e poderá navegar através dos demais que estão contidos nele.

Agora com os MCs criados e instanciados, vamos às actions:

Clique no frame principal (o primeiro frame da timeline) e aperte F9. Cole o código abaixo:

this.janela.barra.onPress = function() {
this._parent.startDrag();
}
//
this.janela.barra.onRelease = function() {
this._parent.stopDrag();
}
//
this.janela.fechar.onRelease = function() {
this._parent._visible = false;
}
//
this.abrir.onRelease = function() {
this._parent.janela._visible = true;
}
//
this.janela.minimax.onRelease = function() {
if (this._parent.conteudo._visible) {
this._parent.conteudo._visible = false;
} else {
this._parent.conteudo._visible = true;
}
}

Ao contrário do Javascript e das versões bem mais antigas (até a 5) do Flash não é necessário um método para pegar um alvo. Você mostra o caminha para se chegar nele a partir do palco (_root sempre para raiz, ou this este filme – isso ficará mais claro quando aprendermos sobre carregar filme externo).

Por exemplo o movie fechar está no dentro do MC janela que por sua vez está no palco, então: this.janela.fechar. E se você estiver em um MC (fehcar por exemplo) e queira acessar o seu pai (janela), fica assim: this._parent.

Repare no código que a lógica é a mesma, porém no Flash tem um método nativo para realiza esse arrastar (startDrag()) e um para parar esse arrastar (stopDrag()). O que no HTML temos que fazer na mão mesmo.

O que reduz e muito o código final. Agora é só testar (CTRL+ENTER).

Para ver o exemplo clique aqui.

9 thoughts on “Flash: startDrag() e stopDrag()

  1. Likko

    Parabéns pelo tuto, foi muito útil pra mim.

    Eu já tenho um arquivo .swf pronto (é um filme para abrir fotos).

    O conteudo da janela pode ser um .swf?

    Como faço para chama-lo pra dentro da janela?

    Obrigado.

    Responder
  2. Thiago

    kara poderia me responder qual é meu erro?

    olha deu tudo certo a janela. Mas tentei colocar aquele botão para voltar a janela e não deu certo.

    Fiz assim…

    this.janela.barra.onPress = function() {
    this._parent.startDrag();
    }
    this.janela.barra.onRelease = function() {
    this._parent.stopDrag();
    }
    this.janela.fechar.onRelease = function() {
    this._parent._visible = false;
    }
    this.voltar_mc.onRelease= function() {
    this._parent._visible = true;
    }
    this.janela.minimar.onRelease = function() {
    if (this._parent.conteudo._visible) {
    this._parent.conteudo._visible = false;
    } else {
    this._parent.conteudo._visible = true;
    }
    }

    Do jeito que está explicado.

    Depois… Nomeei o botão de voltar_mc e coloquei alguns efeitos nele. Mas oque deu errado está em MAIUSCULO.

    THIS.VOLTAR_MC.ONrLEASE = FUNCTION() {
    THIS.JANELA.VISIBLE = TRUE;
    }
    voltar_mc.onPress = function() {
    this.startDrag();
    }
    voltar_mc.onRelease = function() {
    this.stopDrag();
    }

    Se puder me ajudar…

    Responder
    1. Gabi

      Olá Thiago.
      Eu percebi que você está fazendo um botãozinho para a janela. Não complique muito ok?
      Crie um movie clipe com um desenhozinho ou texto escrito MOSTRAR, ABRIR e instâncie-o de abrir.
      Tenha certeza que você instânciou a janela de janela!
      Depois copie e cole esse código no frame de seu site/anima/jogo em flash:
      this.abrir.onRelease = function() {
      this._parent.janela._visible = true;
      };

      O this já fala: ESSE/ESTE
      O abrir que é a instância do nosso MC que faz papel de botão. O onRelease é para quando apertar o mc.
      function junto com o onRelease, quer dizer que é pra executar esta função na hora de apertar.
      _parent é como ele disse, é pra acessar a janela.
      _visible já é meio obvio, para indicar se a janela ficará visivél TRUE e invisível FALSE.
      E pra quem não sabe o ; é para indicar que o nosso código acabou. E esse coment também. Espero que tenha sido útil.

      Responder

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s