FÁBIO DUARTE (79 pts)

DEN IVANOV (260 pts)

ÉMERSON ROCHA (85 pts)

LUIZ HERRERA (117 pts)

ZECA BALA (45 pts)

EDUARDO WALMOTT (226 pts)

ZEBEDIAH (35 pts)

MARCOS JOSÉ PINTO (44 pts)

DEMIS BUCCI (50 pts)

DANIELA PIRES (86 pts)

GABRIEL SPORCH (53 pts)

IRAPUAN MARTINEZ (45 pts)
Treinamento PontoFlash de Flash e ActionScript

Como fazer um efeito embaçado (efeito blur) no Flash?

Queria fazer um mouse trail com easing, mas que o movieclip ficasse sempre embaixo do mouse.

É possível modificar um texto de acordo com a data do computador do usuário?

Como fazer uma variável receber um valor aleatório (randômico) entre 50 e 100?

Existe alguma forma de testar um preloader (carregando) off-line?

Como posso colocar uma transparência (alpha) em um objeto?

Como fazer um contador regressivo de data?

Como fazer uma timeline andar mais lenta que outra?

Mais dicas para otimizar seu Flash Movie.

Alguém sabe como fazer texto com contorno em outra cor?

Usando o método split para criar uma array de uma string?

Como importar uma animação feita no Flax?

Objeto flutuante e gravidade.

Como faço para carregar randomicamente imagens com um botão sem repetilas?
Perspectiva 3D no Flash

Objeto Movieclip - introdução

Objeto array - Arrays X Objetos

Tell Target e Linhas do tempo independentes

Objeto array - Classificar uma array (sorting) e e arrays multidimensionais

ListBox no FlashMX.

Jogo da Forca (segunda parte)

Objeto Movieclip - Propriedades

Objeto Array

GuestBook usando integração Flash e PHP.

Botões comutadores ou com duas ações.

Editor de banco de dados (PHP-MySql) orientado a Objetos (OOP)
Load tween

Fogos de artifícios

Clock

Tangran

Tribble

Random color

Loader Total

Esqueletos

X Position

Drag and zoom

Colors

Engrenagens 1
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