DEN IVANOV (260 pts)

SÁVIO PONTE (39 pts)

PANDOGO (82 pts)

EDUARDO CARREGA (150 pts)

LUIZ AVANCI (51 pts)

EDUARDO WALMOTT (226 pts)

NETO LEAL (116 pts)

GÉRIO (93 pts)

DEMIS BUCCI (50 pts)

JOTA LAGO (40 pts)

FÁBIO DUARTE (79 pts)

ZEBEDIAH (35 pts)
Treinamento PontoFlash de Flash e ActionScript

Algumas dicas para otimizar seu arquivo.

Como fazer um movieclip andar na diagonal?

Como se faz para colocar um .gif seguindo o mouse?

Como eu faço no flash para um logo girar como se fosse um 360º só que na horizonal?

Alguém sabe um modo de converter um número com várias casas após a vírgula para um com apenas 3?

Vi que o único jeito de ter alguma coisinha legal no swift 3d e importando do illustrator?

Quero abrir uma janela popup de um link numa imagem (href).

Como fazer a timeline em vez de passar o filme para frente volte o filme?

Contagem regressiva de data

Como desabilitar botões do Level0, quando abro um arquivo no level1?

Como mudar a cor de um objeto via Actionscript?

Como posso duplicar 3 movieclips e posicioná-los diagonalmente?

Porque o ponteiro do mouse trocado não acompanha o mouse perfeitamente como deveria?

Preciso de formulário usando HTML + ASP + Acess.
Enviando EMAIL com ASP, COLDFUSION E PHP

Integração Flash X ColdFusion.

Desenhando interativamente no Flash 5

Objeto XML - introdução.

Máscara arrastável no Flash 4.

Funções SetInterval e clearInterval no FlashMX.

Desenho de letras - construindo fontes .TTF. no Corel Draw.

Quando usar vetor ou bitmap?

Frases randômicas

Redimensionar um filme no modo de edição

LoadVariables & OnClipEvent(data).

Eventos no FlashMX
Rastro Luis

Preloader avançado

Oposição

Movemask

Álbum de fotos

Plasma2D

Timer

Efeito Blur

Combobox 1

Zoom e movimento

Foto mask

Enquete
HOME | TUTORIAIS
Eventos no FlashMX
por Jonas Galvez

Foi muito difícil a adaptação dos desenvolvedores em Flash 4 para os novos eventos de movieclip introduzidos no Flash 5, que trouxe um novo meio de programação que pode facilitar muito o desenvolvimento. Para executar um script continuamente no Flash 4, em um loop infinito, é preciso utilizar um movieclip vazio com dois frames, um com o script que será executado e outro com um gotoAndPlay para retornar e executar novamente o script do frame anterior. No Flash 5, isso não é mais necessário com a implementação da declaração onClipEvent. Basta inserir o script dentro de um bloco onClipEvent definido com o evento enterFrame para que o script seja executado continuamente.

   No entanto, após algum tempo, o onClipEvent começou a ser visto como um meio de utilizar eventos não tão prático quanto deveria ser. Para começar, o onClipEvent implica a necessidade de se ter código exclusivamente em movieclips, mesmo quando o código não tiver relação alguma com o movieclip no qual ele estiver. Em outras palavras, às vezes é preciso colocar o código em um movieclip só para possibilitar a execução de scripts que necessitam de alguns eventos. Além disso, é difícil ter um controle sobre a execução dos eventos. Quando é necessário limitar a execução de um evento, o desenvolvedor precisa colocar o código dentro de um bloco de condicional if, e ainda definir uma variável booleana (true ou false) para controlar o evento.

   Mas o principal inconveniente do onClipEvent é que ele não segue muito o conceito de OOP (Object Oriented Programming) se analisarmos profundamente. Este problema também inclui a declaração on, utilizada em eventos de botões. Tendo em vista a necessidade de se ter código em objetos individuais, nunca poderemos ter um único código que controle todo o filme, tornando o desenvolvimento mais difícil. Esta dificuldade resulta da necessidade de ter que editar vários objetos e frames que contém scripts.

   Não que o código deva obrigatoriamente ser colocado em um único local, mas recomenda-se o máximo nível de organização e centralização possível, seguindo um modelo orientado à objeto como o do Java por exemplo. Mas imagine que você tem vários movieclips com códigos diferentes, e todos precisam ser alterados. Neste caso, você teria acessar todos os movieclips para editar os scripts, o que daria um grande trabalho. Agora imagine se você tivesse um único código definido em único frame da linha de tempo principal, seria muito mais fácil editá-lo e organizá-lo.

   Mas como utilizar os eventos de movieclips sem precisar colocar código dentro de um movieclip? Alguns programadores já se perguntaram isso, e começaram a desenvolver as famosas event engines. Uma event engine permite definir e utilizar eventos fora de movieclips, de uma forma bastante inteligente e orientada à objeto. Basicamente, uma event engine trabalha da seguinte forma: uma função é criada e depois definimos um evento que deverá acontecer para que a função seja executada. Dentre as principais event engines criadas, destacam-se o ACK (ActionScript Component Kit) e o FLEM (Flash Event Model), ambas criadas pelo mesmo programador: Branden Hall. Um exemplo simples de código utilizando o ACK segue abaixo.

var engine = new Object.ACK.eventEngine();
function funcao() { trace("Alguma coisa."); };
engine.addEventListener("mouseMove", this, "funcao");

   No script acima, utilizo o método addEventListener do objeto eventEngine criado para determinar que a função com o nome "funcao" deverá ser executada quando o evento mouseMove acontecer. Pode parecer simples, mas o processo por trás disso é um tanto complicado, e muitos usuários tiveram dificuldades em se adaptar à maneira como o ACK trabalha. Por essa e outras razões, Branden Hall criou o FLEM, que trabalha de uma forma muito mais inteligente mantendo a conformidade com o padrão OOP. Uma adaptação FLEM do código ACK acima seria feita da seguinte forma.

this.onMouseMove = function() { trace("Alguma coisa."); };
Mouse.addFLEMListener(this);

   Primeiro definimos a função como sendo um método da timeline representada pela palavra-chave this, e depois adicionamos um "listener" do objeto Mouse para a timeline. O objeto Mouse tem quatro eventos: onMouseMove, onMouseUp e onMouseDown. Ao definir um listener do objeto Mouse para a timeline, as funções que tiverem um dos nomes dos eventos comentados serão executadas quando o evento relacionado acontecer. Na verade, o conceito é bem mais complexo, mas esta é a forma mais simples de explicar que encontrei.

   Você deve estar se perguntando porque estou falando de event engines, ACK e FLEM quando o assunto deste artigo são os eventos no FLASH MX. A resposta é muito simples: o modelo de eventos do FLEM foi implementado Flash MX, com algumas alterações óbvias. Para começar, os eventos de movieclip agora podem ser definidos dinamicamente, e são executados sem a necessidade de definir listeners específicos. Segue abaixo a relação dos eventos que podem ser utilizados em movieclips agora.

onLoad, onUnload
onMouseMove, onMouseDown, onMouseUp
onPress, onRelease, onReleaseOutside
onDragOut, onDragOver
onRollOut, onRollOver
onKeyDown, onKeyUp
onSetFocus, onKillFocus
onEnterFrame
onData

   A primeira coisa que se nota é que agora os movieclips também tem os mesmos eventos de botões. Isto facilita bastante quando existe a necessidade de fazer um movieclip trabalhar como um botões. Para tornar um movieclip clicável, não é mais preciso utilizar o hitTest, sendo que agora é possível usar os eventos onPress e onRelease. No Flash MX, os botões têm nomes de instância, as mesmas propriedades dos movieclips e também podem ter eventos definidos dinamicamente. Segue abaixo a relação completa dos eventos.

onPress, onRelease, onReleaseOutside
onDragOut, onDragOver
onRollOut, onRollOver
onSetFocus, onKillFocus

   Ainda é possível utilizar as declarações on e onClipEvent, mas o uso dos novos eventos se torna muito mais atraente, considerando as vantagens que já comentei anteriormente. Para definir um event handler (uma função que deverá ser executada quando um evento acontecer) de um movieclip, basta atribuir uma função à um dos eventos disponíveis, como no exemplo abaixo.

nome_do_movieclip.onMouseUp = function() {
    trace("Mensagem: o mouse foi clicado!");
};

Isso seria o mesmo que definir um onClipEvent(mouseUp) para o movieclip, com a vantagem que o código pode ficar em qualquer lugar, facilitando a edição e manutenção do script. O mesmo processo se aplica aos botões, veja o exemplo abaixo.

nome_do_botao.onRelease = function() {
    trace("Mensagem: o botão foi clicado!");
};

   Ainda existe muita coisa relacionada à eventos no Flash MX, mas creio que o objetivo deste artigo já foi alcançado. Para que você possa ter um melhor aproveitamente, agora irei guiá-lo em um rápido tutorial para criação de um cursor personalizado utilizando o novo modelo de eventos do Flash MX.

1. Crie um novo filme no Flash MX com o layout e dimensões que você desejar. Depois, desenhe uma forma que você quer que seja o cursor personalizado, e transforme-o em um movieclip com o nome de instância seta.

2. Clique com o botão direito do mouse o primeiro e único frame do filme e selecione Actions. No painel Actions, insira o script abaixo.

_root.seta.onMouseMove = function() {
     this._x = _root._xmouse;
     this._y = _root._ymouse;
     updateAfterEvent();
 };
 Mouse.hide();

   Para acessar propriedades do movieclip a partir de uma função como esta, é necessário o uso da palavra-chave this, que mesmo embora nào é necessária na declaração onClipEvent, caracteriza uma boa prática de programação.

  Neste artigo você aprendeu sobre os problemas e vantagens dos modelos de eventos empregados no Flash 5 e no Flash MX, e também viu como criar um cursor personalizado utilizando o modelo de eventos do Flash MX. Em breve irei publicar um artigo mais profundo sobre o assunto, ensinando a trabalhar com listeners em objetos e classes. Clique aqui para baixar o arquivo fonte do exemplo utilizado neste artigo.



Devido à reformulação implementada no site, pode ser que você encontre alguns links quebrados. Por favor, ajude-nos a corrigir eventuais problemas nos informando links quebrados
0 comentário