Existem várias formas de alterar o cursor do mouse no Flash. A maioria delas usa “onEnterFrame”, o que significa que a cada frame o swf atualiza a posição do cursor. Daí já dá pra perceber a falha desse método porque se precisarmos usar um frame rate baixo, como 12, por exemplo, o cursor novo não fica totalmente fiel ao cursor normal. Pode-se argumentar que o uso do comando “updateAfterEvent” resolve isto, mas eu encarei um problema quando estava construindo o site da Brazucah. Ao utilizarmos gráficos complexos, que exigem grande processamento do CPU, a tendência é que o mouse fique tremido e pouco fiel. Saí estudando todas as possibilidades e finalmente encontrei a resposta, e ela se chama “setInterval”. Com este comando, dizemos ao swf para executar uma tarefa de tempo em tempo, mas medindo este tempo em segundos, ao invés de utilizar os frames. O que eu fiz foi programar este tempo para 0.1 milesegundos (milesegundo é a medida de tempo utilizada pelo Flash, cada milesegundo é 1 segundo dividido por 1000) e mandar o swf atualizar a posição do cursor sempre que se completasse esse período. Ou seja, a todo instante.
Crie um novo arquivo no Flash, coloque o Movie Clip que você deseja que substitua o mouse no palco, clique nele e nomeie sua instância (no canto inferior direito, em baixo de “Movie Clip”) como “rato” (sem aspas).
Depois, no primeiro frame do filme principal, cole este código:
stop();
//De início, escondemos o mouse.
Mouse.hide();
//É preciso dar um nome para o “setInterval” e definí-lo como número
var Mudando:Number;
//Aqui você escolhe o período de tempo que “setInterval” executará
var tempo:Number = 0.1;
//Esta é a função executada a cada 0,1 milesegundo
function mudaMouse():Void {
//vc está dizendo para o seu movie clip acompanhar o x e o y do mouse
rato._x = _root._xmouse;
rato._y = _root._ymouse;
//Este comando auxilia na independência deste evente em relação ao que acontece no resto do seu filme
updateAfterEvent();
}
//Aqui está o setInterval. O “this” se refere a ele mesmo, “mudaMouse” é o nome da função a ser repetida e “tempo” é o período escolhido acima.
Mudando = setInterval(this, “mudaMouse”, tempo);
//Eu criei um outro Movie Clip chamado “imagem” e o coloquei como fundo do swf para brincarmos
_root.imagem.onPress = function() {
//ao clicar no fundo, o mouse muda de Cabana é Bacana para Bacana é Cabana
rato.gotoAndStop(2);
}
_root.imagem.onRelease = _root.imagem.onReleaseOutside = function() {
//ao soltar, dentro ou fora do MC “imagem” o mouse volta ao frame anterior
rato.gotoAndStop(1);
}
_root.imagem.onRollOut = function() {
/*mandamos o mouse ficar escondido de novo, pois se apertarmos o botão direito
o menu do Flash puxa o mouse normal novamente*/
Mouse.hide();
}
_root.imagem.onRollOver = function() {
/*mandamos o mouse ficar escondido de novo, pois se apertarmos o botão direito
o menu do Flash puxa o mouse normal novamente*/
Mouse.hide();
}
Fácil né? Se tiver dificuldade, deixa um comentário.
Pablo Cabana
abril 4th, 2008 at 15:31
Excelente, funciona muito melhor do que “onEnterFrame”.
junho 10th, 2008 at 19:31
NEsse tutor vc estáexplicandocomo fazer Flash 6.0 mais oke eu tenhu aki em casa é o MX feis o download do arki a cima e não rodou no MX….
e num funfo!
queria que postaseum de Flash MX.
Fui…
Vlw….
junho 10th, 2008 at 19:37
Outra duvida voce teria umtutorial pra tipow asim:
fazer um jogo onde o curso é um mira de uma arma e so acertase quando atirase no lugar certo tipow luraes definidos por x & y ou botão.
fui…
Té mais.
Vlw’s…
junho 11th, 2008 at 12:56
Gustavo, o código está aí. É so colar no seu arquivo Flash MX e criar o Movie Clip “rato”.
janeiro 15th, 2009 at 8:20
cara, num deu certo naum…
será pq eu to usando o flash 8???
num sei, soh sei q foi assim…
o mouse sumiu e por nada aparece, jah testei altas modificações… mas naum deu em nada!
flow
wabra!
janeiro 15th, 2009 at 9:11
Po Fernando. Tem que estudar um pouquinho de AS2…
março 21st, 2009 at 17:48
cara eu usei deu certo, foi usado como um pincel em um jogo de desenho para colorir, porém quando eu volto pra pagina inicial ou descarrego outro swf em cima , o mouse volta invisivel, e eu nao quero abrir em html como faço para resolvel ou seja pra quando for descarregado outro swf o mouse aparecer.
março 23rd, 2009 at 10:24
Silvaney, você deve usar o comando contrário:
Mouse.show();
março 23rd, 2009 at 11:34
Kara deu certo valew ai pela força. abrass
março 26th, 2009 at 13:37
Olá,estou tentando aqui + a parte
//Aqui está o setInterval. O “this” se refere a ele mesmo, “mudaMouse” é o nome da função a ser repetida e “tempo” é o período escolhido acima.
Mudando = setInterval(this, “mudaMouse”, tempo);
Está dando erro aqui no meu flash
uso o cs
abraços
março 26th, 2009 at 13:54
Opa,Já Consegui…
Tem algum jeito de,em um site que estou fazendo,quando eu clicar em qualquer parte do site(a seta é uma mira)espirrar uma tinta no lugar? um uma mancha…?(Site pra PaintBall)
Outra coisa,como eu coloco um som de tiro quando a pessoa der um clique
?
Abraços
março 26th, 2009 at 14:07
Aí só estudando um pouquinho Bruno…
abril 8th, 2009 at 12:15
Cara, eu te amo…hehehehehehehe
Excelente explicação e pra mim que estou aprendendo (fuçando) mto sobre flash ultimamente, e esse comportamento será mto útil!!!
Valeu!
abril 8th, 2009 at 13:14
ahauhauah
Disponha Felipe! Seja sempre bem-vindo ao Cabanoblog. ;)
maio 13th, 2009 at 17:24
E se eu quiser fazer com que quando fique em cima de um botao,apareça a maozinha tradicional???
maio 13th, 2009 at 17:41
Lucas, apenas use : Mouse.show();
maio 14th, 2009 at 8:04
ahh!! Valeu !!!
alias, acabei caindo aqui de para quedas, e achei o site de voces, e o portifolio tudo muito bom mesmo!!!
vcs estao de parabens!
e continue postando as dicas ai p gente heheh!
flw
maio 14th, 2009 at 10:58
valeu Lucas!
volte sempre!
junho 4th, 2009 at 10:33
Pablo espero que possa me ajudar no meu problema!! A questão é que tenho um mapa arrastável e quando clico com a mão que criei com seu tutor a mão trava, mas continuo arrastando o mapa mesmo assim. Que posso fazer???
See ya!!
junho 4th, 2009 at 10:52
Percebi que ele não trava se eu tirar uma outra função que havia aplicado, mas entaum o mapa não se move:
mapa.onPress = function(){
this.startDrag(false, -400, -300, +600, +400);
}
mapa.onRelease = function(){
this.stopDrag();
}
setembro 2nd, 2009 at 17:46
Cara,
Deu certinho, bem legal esse esquema.
Funciona se eu limitar uma área para o cursor mudar?
Exemplo: tenho um stage a 1024×768, quero que o cursor só mude sobre uma imagem de 200×200, e no resto do stage volte a seta default.
Rola?
Valeu cara, parabéns!
setembro 3rd, 2009 at 11:32
Claro que rola André! É só você configurar o mouseOver para cada objeto.
maio 11th, 2010 at 22:50
Eu usaria o addEventListener para acompanhar o mouse:
Mouse.hide();
target.addEventListerner(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
function mouseMoveHandler(e){
rato.x = xmouse;
}
maio 11th, 2010 at 22:51
Eu usaria o addEventListener para acompanhar o mouse:
Mouse.hide();
addEventListerner(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
function mouseMoveHandler(e){
rato.x = _xmouse;
rato.y = _ymouse;
}
maio 11th, 2010 at 22:57
corrigindo o script acima seria:
Mouse.hide();
this.addEventListerner(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
function mouseMoveHandler(e){
rato.x = mouseX;
rato.y = mouseY;
}
maio 12th, 2010 at 11:48
Silva, se estiver usando AS3, aí sim…