Uma pergunta em Flashpad questionou se é possível arrastar uma máscara
no Flash 4. A resposta é não, mas eu sugeri uma técnica para fazer uma
simulação.
Não é perfeita, de forma alguma - às vezes fica mal alinhada com o objeto
sob ela - mas esses bugs podem ser corrigidos com alguns truques. Nesse
exemplo, deixei o arquivo na forma mais simples possível, inclusive com
os bugs, apenas para ilustrar a idéia.
Como
funciona?
Como você não pode arrastar uma máscara, é preciso por a cabeça para funcionar.
Nesse caso, a máscara fica parada enquanto todo o resto se move...
Primeiro, crie um movie clip com o seu objeto mascarado - aqui está a
figura do Stickman e texto (Objeto). Agora leve isso para um segundo novo
movie clip e lhe dê um Instance Name (por exemplo, /objeto). No novo movie
clip, crie sua máscara (aqui um pequeno quadrado) e o faça mascarar a
camada com o movie clip objeto nela. Finalmente, coloque um botão (o pequeno
diamante cinza).
Agora, dê ao botão as seguintes ações:
On
(Press)
Set Variable: "/:Drag" = 1
End On
On (Release, Release Outside)
Set Variable: "/:Drag" = 0
End On
Isso
define uma variável (/:Drag) para um ou zero, dependendo se o usuário
está ou não clicando o botão com o mouse. Agora, leve esse novo movie
clip para a linha do tempo principal e lhe dê um Instance Name (por exemplo,
/mask).
Crie um movie clip vazio, leve-o à linha do tempo principal e lhe dê o
Instance Name tracker. Crie outro movie clip e o chame control. Crie um
keyframe na frame 2 e programe-a para Go To e Play (frame 1).
Agora, dê ao frame 1 as seguintes ações:
If
(/:Drag eq 1)
Start Drag ("/tracker", lockcenter)
End If
If (/:Drag eq 0)
Stop Drag
End If
Set Property ("/mask/object", X Position) = 0-(GetProperty ("/tracker",_x))
Set Property ("/mask/", X Position) = GetProperty ("/tracker",_x)
Set Property ("/mask/object", Y Position) = 0-(GetProperty ("/tracker",_y))
Set Property ("/mask/", Y Position) = GetProperty ("/tracker",_y)
Não
esqueça de levar esse novo movie clip à linha do tempo principal.
Olhe atentamente e verá que o que está acontecendo é: quando /:Drag é
igual a 1 (ou seja, o mouse está sendo clicado), o movie clip control
(que coloca cada frame em loop), define a posição do /Mask/Object (ou
seja, o movie clipe com o texto e a figura) como "oposta" à posição do
movie clip máscara (cuja posição é determinada pela posição de tracker).
Então, se o movie clip mask está em x = 20, y = 10, o objeto é movido
para x= -20, y= -10. O resultado é que ele parece estar parado, enquanto
a máscara se move.
Ah,
que coisa inteligente! Eu sei. Às vezes sou tão esperto que me assusto.
É verdade. 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