Você está na página 1de 6

CURSORES PERSONALIZADOS 2

Introduo Com o Flash5, ganhou-se a capacidade de criar Cursores personalizados. Com uma pequena quantidade de cdigo 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 cdigo 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, ento o utilizador ficaria espera que alguma coisa acontecesse para os orientar. Ok, aqui que o conceito "Cursor Personalizado" aparece.
2002 VISUALWORK Produes Multimedia, Lda. Todos os direitos reservados. Qualquer reproduo, incluindo fotocpia, s pode ser feita com autorizao expressa da VISUALWORK. FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos so marcas registadas da VISUALWORK Produes Multimedia, Lda.

Cursor personalizado simples Como o Flash 5 consegues esconder o cursor do rato, podes criar os teus prprios 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 verso 5 do Flash possvel associar scripts a Movie Clips atravs dos ClipEvents, podemos criar um simples cursor colocando no instance de um Movie Clip as seguintes actions:
onClipEvent (load) { Mouse.hide(); startDrag ("", true); }

O cdigo acima diz ao Flash para fazer duas coisas quando o Movie Clip carregado. Primeiro diz ao rato para desaparecer atravs da instruo "Mouse.hide()" - deixa de haver cursor do rato standard. A seguir atravs da action "startDrag("",true)" o Flash sabe automaticamente que deve comear a arrastar o Movie Clip que contm 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. Fcill, no ? 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 botes e s com um estado, ento 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 experincia, altera o interface do exemplo anterior inclundo um Movie Clip standard arrastvel. Isto no resulta! Talvez a soluo 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 no isso que vamos fazer, a soluo muito mais perfeita. A Macromedia refere dois mtodos para criar cursores personalizados, vamos ento ver o segundo ao qual vamos chamar-lhe "mtodo alternativo". Depois de veres este mtodo vais chamar-lhe "a melhor maneira de personalizar cursores". Siga aquele rato! O que se passa de errado com o primeiro mtodo de criar cursores personalizados um problema que persiste desde Flash 4 - no consegues arrastar dois objectos ao mesmo tempo.

2002 VISUALWORK Produes Multimedia, Lda. Todos os direitos reservados. Qualquer reproduo, incluindo fotocpia, s pode ser feita com autorizao expressa da VISUALWORK. FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos so marcas registadas da VISUALWORK Produes 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 atravs de um boto escondido com a opo "Track as Button" activada dentro de um Movie Clip que era arrastado e ento atravs de scripting posicionava-se dinamicamente os objectos em funo da posio 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 situao. 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 no ests a dizer isto em relao 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 localizao das coordenadas do cursor em qualquer altura (mesmo que o cursor esteja escondido) atravs 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. Ento, no cdigo a cima, continuamos a esconder o rato mas em vez de o arrastar-mos posiciona-mo-lo nas coordenadas do rato atravs dos valores indicados em "_root._xmouse" e "_root._ymouse". Estes valores so actualizados atravs do EventClip "mouse Move" responsvel por fazer correr o script dentro dele sempre que o rato se mova. Personalidades Multiplas dos cursores At agora estive-mos a ver questes bsicas de cursores personalizados, a prxima questo "Porque hei-de mudar o cursor logo no inicio do meu filme?" - Esta uma boa questo, pois

2002 VISUALWORK Produes Multimedia, Lda. Todos os direitos reservados. Qualquer reproduo, incluindo fotocpia, s pode ser feita com autorizao expressa da VISUALWORK. FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos so marcas registadas da VISUALWORK Produes Multimedia, Lda.

no sabemos quais so as intenes 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 no normal. Estas mudanas contextuais so para pessoas que aproveitam os interfaces para ter uma deixa para diferenciar reas. Isto o que tu consegues com os cursores personalizados sem grande confuso. Exemplo com vrias funcionalidades e pouco cdigo Abre o ficheiro i_cursor_personalizado_04.fla para acompanhar a explicao do cdigo 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" comea por esconder o rato e a seguir atribui valores a quatro variveis que sero 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 Produes Multimedia, Lda. Todos os direitos reservados. Qualquer reproduo, incluindo fotocpia, s pode ser feita com autorizao expressa da VISUALWORK. FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos so marcas registadas da VISUALWORK Produes 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 condies de verificao 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 boto de reset a timeline do cursor avana 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" so responsveis pela realizao das funcionalidades associadas aos objectos : Arrastar da pasta, atribuio de nova cor pasta, fazer o reset da cor da pasta. Repara que os eventos "mouseMove" e "mouseDown" tm as a condio "else" que chama o Movie Clip "cursor" e diz para alterar a seta por defeito se no estiver em cima de nenhum objecto de clicar.

2002 VISUALWORK Produes Multimedia, Lda. Todos os direitos reservados. Qualquer reproduo, incluindo fotocpia, s pode ser feita com autorizao expressa da VISUALWORK. FLASHWEBTRAINING.com, truquesedicas.com e respectivos logos so marcas registadas da VISUALWORK Produes Multimedia, Lda.

Você também pode gostar