CURSORES PERSONALIZADOS 2
Introdução
Com o Flash5, ganhou-se a capacidade de criar Cursores personalizados. Com uma pequena
quantidade de código podes substituir o ponteiro do rato por qualquer coisa que queiras. O que
possibilita tudo isto é o objecto "Mouse".
Tutorial
Mouse visivel, Mouse invisivel
O que é que o objecto Mouse tem a ver com os cursores personalizados? Na realidade, tudo!
Na linguagem orientada a objectos do Flash5 nada refere que o cursor consiga por si ser
personalizado. Mas o objecto "Mouse" tem a capacidade de ser alterado entre dois estados,
"hide" (esconder) e "show" (exibir). Ou seja, com um simples código consegues alterar o
estado do cursor do rato entre visivel e invisivel.
Para que serve esconder o cursor do rato? Claro que isso causaria a impossibilidade de
navegar em interfaces que necessitem de cliques do rato em locais especificos, então o
utilizador ficaria à espera que alguma coisa acontecesse para os orientar. Ok, é aqui que o
conceito "Cursor Personalizado" aparece.
© 2002 VISUALWORK Produções Multimedia, Lda. Todos os direitos reservados. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa da VISUALWORK.
FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos são marcas registadas da VISUALWORK Produções Multimedia, Lda.
Cursor personalizado simples
Como o Flash 5 consegues esconder o cursor do rato, podes criar os teus próprios cursores,
ponteiros ou o que tu quiseres para o substituir. Qualquer coisa que esteja numa instance de
um Movie Clip poderá ser o teu cursor. Tudo isto com uma grande facilidade.
A partir da versão 5 do Flash é possível associar scripts a Movie Clips através dos ClipEvents,
podemos criar um simples cursor colocando no instance de um Movie Clip as seguintes actions:
onClipEvent (load) {
Mouse.hide();
startDrag ("", true);
}
O código acima diz ao Flash para fazer duas coisas quando o Movie Clip é carregado. Primeiro
diz ao rato para desaparecer através da instrução "Mouse.hide()" - deixa de haver cursor do
rato standard. A seguir através da action "startDrag("",true)" o Flash sabe automaticamente
que deve começar a arrastar o Movie Clip que contém o script, O valor "true" diz ao Movie Clip
para o centro deste estar sempre junto do ponto do cursor do rato (embora invisivel o ponto
do rato existe). Assim este Movis Clip a ser o teu cursor do rato. Fácill, não é?
Cursor! Anulado novamente!
Ok, isto trabalha bem, portanto, para que hei-de continuar a ler? Bem, se só vais precisar de
um cursor personalizado para clicar em alguns botões e só com um estado, então já está,
perfeito. Mas se calhar vais precisar de arrastar alguma coisa ou possivelmente queres que
tenha comportamentos diferentes conforme o contexto, por isso vamos continuar.
Tentemos uma pequena experiência, altera o interface do exemplo anterior incluíndo um Movie
Clip standard arrastável.
Isto não resulta! Talvez a solução seria escrever-mos um script que deixe de arrastar o
primeiro cursor enquanto arrasta a pasta e volte a arrastar o primeiro Movie Clip quando a
pasta for largada, mas não é isso que vamos fazer, a solução é muito mais perfeita.
A Macromedia refere dois métodos para criar cursores personalizados, vamos então ver o
segundo ao qual vamos chamar-lhe "método alternativo". Depois de veres este método vais
chamar-lhe "a melhor maneira de personalizar cursores".
Siga aquele rato!
O que se passa de errado com o primeiro método de criar cursores personalizados é um
problema que persiste desde Flash 4 - não consegues arrastar dois objectos ao mesmo tempo.
© 2002 VISUALWORK Produções Multimedia, Lda. Todos os direitos reservados. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa da VISUALWORK.
FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos são marcas registadas da VISUALWORK Produções Multimedia, Lda.
In Flash4, one way around this sort of problem might have been to track the position of a
hidden 'map' movieclip being dragged by the system cursor and to use scripting to dynamically
position objects based on the 'map' position. But that's a lot of work to go through just for a
fancy cursor in this case right? Don't worry. Again, Flash5's extended scripting language has
you covered.
No Flash 4, uma maneira de contornar este problema era através de um botão escondido com
a opção "Track as Button" activada dentro de um Movie Clip que era arrastado e então através
de scripting posicionava-se dinamicamente os objectos em função da posição do Movie Clip
arrastado. Mas isto é muito trabalho para colocar no sitio certo um cursor "caprichoso".
Felizmente as melhorias do scripting no Flash 5 resolvem esta situação.
Substitui o script do teu Movie Clip "cursor" pelo seguinte:
onClipEvent (load) {
Mouse.hide();
}
onClipEvent (mouseMove) {
this._x = _root._xmouse;
this._y = _root._ymouse;
updateAfterEvent();
}
Deves estar a dizer "Isto resulta mesmo!", se não estás a dizer isto em relação ao teu Movie,
vê onde está o erro no ficheiro i_cursor_personalizado_03.fla.
Como é que isto funciona? - Este script tira partido das novas capacidades do scripting do
Flash 5, a capacidade de obter a localização das coordenadas do cursor em qualquer altura
(mesmo que o cursor esteja escondido) através das propriedades "_xmouse" e "_ymouse"
relativamente à "_root" (coordenadas do stage principal).
So, in the code above, we again hide the mouse but then instead of dragging our movieclip we
set its position to equal that of the _root._xmouse and _root._ymouse coordinates. Since we
are no longer dragging the cursor clip, it's free to now point, click, and drag other objects as
you see fit.
Então, no código a cima, continuamos a esconder o rato mas em vez de o arrastar-mos
posiciona-mo-lo nas coordenadas do rato através dos valores indicados em "_root._xmouse" e
"_root._ymouse". Estes valores são actualizados através do EventClip "mouse Move"
responsável por fazer correr o script dentro dele sempre que o rato se mova.
Personalidades Multiplas dos cursores
Até agora estive-mos a ver questões básicas de cursores personalizados, a próxima questão é
"Porque hei-de mudar o cursor logo no inicio do meu filme?" - Esta é uma boa questão, pois
© 2002 VISUALWORK Produções Multimedia, Lda. Todos os direitos reservados. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa da VISUALWORK.
FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos são marcas registadas da VISUALWORK Produções Multimedia, Lda.
não sabemos quais são as intenções nem a altura em que cada um pretende esconder o cursor
standard, ou seja, tudo depende do projecto que se está a conceber.
Uma das caracteristicas mais interessantees dos cursores é que podem responder às coisas
que apontam ou clicam - é uma ferramenta contextual. Ao usares o teu programa de pintura é
natural que o teu cursor se mantenha igual quando mudas de ferramentas como brush, lasso
ou marquee? Certamente que dizes que não é normal. Estas mudanças contextuais são para
pessoas que aproveitam os interfaces para ter uma deixa para diferenciar áreas. Isto é o que
tu consegues com os cursores personalizados sem grande confusão.
Exemplo com várias funcionalidades e pouco código
Abre o ficheiro i_cursor_personalizado_04.fla para acompanhar a explicação do código deste
exemplo.
Vamos dar um olhada ao script abaixo, todo ele associado ao MovieClip "cursor":
onClipEvent (load) {
Mouse.hide();
left = 50;
right = 500;
top = 50;
bottom = 350;
}
O ClipEvent "load" começa por esconder o rato e a seguir atribui valores a quatro variáveis que
serão usadas para criar os limites por onde o objecto pode ser arrastado.
onClipEvent (mouseMove) {
this._x = _root._xmouse;
this._y = _root._ymouse;
for (objects in _root) {
if (_root[objects].hitTest(_x, _y, true)) {
over = objects;
}
}
if (over == "pasta") {
gotoAndStop (2);
} else if (over.substr(0, 2) == "cp") {
gotoAndStop (3);
} else if (over == "resetbutton") {
gotoAndStop (4);
} else {
gotoAndStop (1);
}
© 2002 VISUALWORK Produções Multimedia, Lda. Todos os direitos reservados. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa da VISUALWORK.
FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos são marcas registadas da VISUALWORK Produções Multimedia, Lda.
updateAfterEvent();
}
O evento "mouseMove" posiciona o cursor no "_x" e "_y" do rato. O ciclo "for" verifica se o
nossso cursor está em cima de algum objecto localizado na "_root" e aplica o "hitTest" que se
verdadeiro atribui "over=objects". Isto permite fazer condições de verificação a todos os
"objectos" em vez de verificar um a um. Quando o rato detecta que está em sobre a pasta, a
paleta de cor, ou no botão de reset a timeline do cursor avança para a frame que tem o cursor
cotextualizado a esse objecto.
onClipEvent (mouseDown) {
if (over == "pasta") {
startDrag (_root.pasta, false, left, top, right, bottom);
} else if (over == "cpyellow") {
myColor = new Color("_root.pasta.corpasta");
myColor.setRGB(0xffcc66);
} else if (over == "cpblue") {
myColor = new Color("_root.pasta.corpasta");
myColor.setRGB(0x99cccc);
} else if (over == "cpgreen") {
myColor = new Color("_root.pasta.corpasta");
myColor.setRGB(0x669933);
} else if (over == "resetbutton") {
myColor = new Color("_root.pasta.corpasta");
myColor.setRGB(0x999999);
} else {
gotoAndStop (1);
}
}
onClipEvent (mouseUp) {
stopDrag ();
}
Os eventos "mouseDown" e "mouseUp" são responsáveis pela realização das funcionalidades
associadas aos objectos :
Arrastar da pasta, atribuição de nova cor à pasta, fazer o reset da cor da pasta. Repara que os
eventos "mouseMove" e "mouseDown" têm as a condição "else" que chama o Movie Clip
"cursor" e diz para alterar a seta por defeito se não estiver em cima de nenhum objecto de
clicar.
© 2002 VISUALWORK Produções Multimedia, Lda. Todos os direitos reservados. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa da VISUALWORK.
FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos são marcas registadas da VISUALWORK Produções Multimedia, Lda.
Download

Tutorial em PDF - Flash Web Training