Fiquei
bastante despontado quando descobri que o Flash5 ainda não permite mover
máscaras por meio de um script. Então resolvi fazer esse tutorial para
mostrar como se pode criar esse efeito de maneira simples e objetiva.
Primeiro
crie um movie clip com seu objeto a ser mascarado (no caso de nosso exemplo,
Masked Object, com algum texto). Agora coloque-o dentro de um movie clip
(Mask Movie) e dê-lhe a Instance Name masked_object. No novo movie
clip, crie sua máscara (aqui um círculo vermelho) num layer acima e use-o
para mascarar o layer abaixo. Agora coloque esse novo movie clip na sua
Timeline e dê-lhe uma instance name (aqui, mask_movie).
O mais importante acontece nas ações de objeto da _root.mask_movie clip.
Você pode observar tanto selecionando o movie clip, e depois dando um
clique com o botão direito do mouse e escolhendo actions, ou selecionando
o movie e depois dando um clique na seta azul "Show Actions" no canto
direito inferior da janela do Flash.
onClipEvent
(mouseMove) {
// Buscar as coordenadas do mouse
x = _root._xmouse; y = _root._ymouse;
// Mover o clip mascarado para as coordenadas do
mouse
this._x = x;
this._y = y;
// mover o objeto mascarado exatamente o mesmo valor,
mas negativo
this.masked_object._x = (0-x);
this.masked_object._y = (0-y);
// atualizar o movie para um movimento suave
updateAfterEvent();
}
Como
você pode ver, não é grande coisa. O movie usa um 'onClipEvent'
para detectar a qualquer momento o movimento do mouse, e então define
as variáveis x e y para as coordenadas do mouse. Note o uso do _root
nessas linhas. A não ser quando especificado, o Flash5 dará as coordenadas
do mouse "local" - isto é, relativo ao centro do clip que você está direcionando
- em detrimento do movie principal. Assinalando com _root, você
evita isso.
Uma vez detectada a posição do mouse, nós usamos this._x e this._y
(que apresentam a mesma função que o comando SetProperty no Flash4)
para mover o mask_movie para o mesmo lugar. Observe como usamos
o parâmetro this - um atalho que significa "esse movie clip" -
e assim não precisamos especificar todo o caminho (_root.mask_movie).
Para dar a ilusão que o objeto mascarado está parado e é a máscara que
se move, movemos o objeto na direção oposta e exatamente a mesma distância
- aqui calculada por (0-x) e (0-y). É um atalho, mas funciona.
Finalmente, o comando updateAfterEvent() força o movimento da máscara
à atualização imediata, o que faz o efeito mais eficaz do que se a atualização
fosse feita apenas uma vez por frame.
É isso? É isso. Simples (eu espero...). Boa sorte!
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