Resultado final:
Tiro ao alvo - clique nos logotipos voadores para derrubá-los. Acompanhe seus cliques, acertos, erros e a sua precisão.
Código:
-
class="codigo">/*
- Animação Programada
- Este exemplo mostra como criar, posicionar, animar, testar acerto da figura com o mouse e deletar MCs (movieClips)
- */
- /*
- Definição das variáveis que serão usadas para estatísticas
- */
- _global.acertos = 0; //Armazena a quantidade de logos atingidos
- _global.erros = 0; // Armazena a quantidade de logos que “fugiram”
- _global.cliques = 0; // Armazena a quantidad e cliques (acertos e erros)
- _global.cProfundidade = 100;
- _global.nivel = 1;
- /*
- Definição das variáveis (tempo de execução) que serão usadas nos cálculos
- */
- var xVelocidade:Number = 3;
- var larguraStage:Number = 550; //Definição da área dos cliques
- var alturaStage:Number = 580; // Definição da área dos cliques
- /*
- Inclusão a instância do MC alvo_mc da Library no Stage.
- Este clip será usado como um cursor personalizado
- */
- this.attachMovie(”alvo_mc”, “alvo_mc”, 5001);
- /*
- Oculta o cursor do mouse
- */
- Mouse.hide();
- /*
- Cria Listener para o Mouse
- */
- var mouseListener:Object = new Object();
- /*
- Sempre que o cursor do mouse mover-se para fora do arquivo SWF, a posição será atualizada na instância do alvo_mc no Stage.
- */
- mouseListener.onMouseMove = function() {
- alvo_mc._x = _xmouse;
- alvo_mc._y = _ymouse;
- };
- /*
- Quando o botão do mouse é clicado, verificar se o cursor está fora dos limites do Stage.
- Em caso positivo, incrementa o número de cliques dados
- */
- mouseListener.onMouseDown = function() {
- _global.cliques++;
- if (fundo_mc.hitTest(_xmouse, _ymouse, false)) {
- _global.acertos++;
- }
- };
- Mouse.addListener(mouseListener);
- /*
- Define um TextFormat que é usado para formatar o campo estatisticas_txt.
- */
- var meu_textoFormatado:TextFormat = new TextFormat();
- meu_textoFormatado.bold = true;
- meu_textoFormatado.font = “Arial”;
- meu_textoFormatado.size = 12;
- meu_textoFormatado.color = 0×000000;
- /*
- Cria um campo texto para mostrar as estatísticas do jogador.
- */
- this.createTextField(”estatisticas_txt”, 5000, 10, 0, 530, 22);
- /*
- Aplica o TextFormat no campo texto.
- */
- estatisticas_txt.setNewTextFormat(meu_textoFormatado);
- estatisticas_txt.selectable = false;
- updateStats();
- /*
- Inclui um evento onEnterFrame na timeline principal para que um novo logo seja constantemente gerado no jogo.
- */
- this.onEnterFrame = function() {
- /*
- Inclui aleatoriamente um novo logo
- */
- if (randRange(0, 20) == 0) {
- /*
- anexa uma nova instância do logo da Library no Stage e define uma profundidade única
- */
- var randomLogo:Number = randRange(1, 3);
- /*
- Observe que o nome do MC a seguir é obtido pelo Flash através do Identifier do Linkage (clique com o botão direito
- do mouse sobre o objeto na Library e escolha Linkage…)
- */
- var thisMC:MovieClip = this.attachMovie(”logo”+randomLogo+”_mc”, “logoAlvo”+_global.cProfundidade+”_mc”, _global.cProfundidade);
- _global.cProfundidade++;
- /*
- Configura a posição inicial do logoAlvo_mc à esquerda do Stage
- */
- thisMC._x = -thisMC._width;
- /*
- Cria um número aleatório entre 80 e 100.
- Será usado para o tamanho (escala) do MC atual, alpha e velocidade
- que se moverá pelo Stage.
- */
- var escala = randRange(80, 100);
- /*
- Configura as propriedades do _xescala e _yescala no MC atual.*/
- */
- thisMC._xescala = escala;
- thisMC._yescala = escala;
- thisMC._alpha = escala;
- thisMC.speed = xVelocidade+randRange(0, 3)+_global.nivel;
- /*
- Configura um valor aleatório para _y.
- Agora, ao invés de todos os logos voarem sobre o mesmo caminho,
- eles variam sua posição vertical levemente. */
- */
- thisMC._y = Math.round(Math.random()*350)+65;
- /*
- Cria um manipulador onEnterFrame que executam algumas dúzias de vezes por segundo */
- */
- thisMC.onEnterFrame = function() {
- /*
- Move o logo horizontalmente ao longo do Stage.
- No momento todos os logos movem-se da esquerda para a direita
- */
- this._x += this.speed;
- /*
- Decrementa levemente a posição do _y no MC atual.
- Isto faz com que pareça que os logos estejam voando
- levemente mais alto do que movem-se no Stage.
- */
- this._y -= .4;
- /*
- Se a posição atual do logo é maior do que o Stage,
- conta o logo como “perdido” e apaga sua instância.
- */
- if (this._x>larguraStage) {
- _global.erros++;
- updateStats();
- this.removeMovieClip();
- }
- };
- /*
- Quando o logo é pressionado, contar como um “acerto”
- */
- thisMC.onPress = function() {
- /*
- Atualizar as estatísticas do jogador
- */
- _global.acertos++;
- if ((_global.acertos%40) == 0) {
- _global.nivel++; // Mudança de nível
- }
- updateStats();
- /*
- Vai para o rótulo do MC chamado “hit”
- (que permite você mostrar uma animação engenhosa quando a
- instância é atingida.)
- */
- this.gotoAndPlay(”hit”);
- /*
- Configura algumas variáveis locais que você usará para
- animar o logo caindo pelo Stage.
- */
- var ymov = this._y;
- var gravity = 20;
- /*
- Cria um evento onEnterFrame para a instância do MC atual.
- */
- this.onEnterFrame = function() {
- ymov += gravity;
- xmov *= 0.5;
- /*
- Incrementa a rotação do MC atual no sentido horário em 5 graus.
- */
- this._rotation += 5;
- /*
- Configura as propriedades _x e _y do MC no Stage,
- isto permite-nos fazer com que a queda
- seja mais realista
- */
- this._x += xVelocidade;
- this._y = ymov;
- /*
- Após anular a posição _y position no Stage,
- remova o MC para que suas coordenadas não sejam
- continuamente calculadas */
- if (this._y>alturaStage) {
- this.removeMovieClip();
- }
- };
- /*
- Apagar o manipulador de evento onPress.
- Isto faz com que o logo não possa ser continuamente clicado
- enquanto ele está caindo pelo Stage.
- */
- delete this.onPress;
- };
- }
- };
- /*
- Função que atualiza as estatísticas no Stage
- */
- function updateStats() {
- var precisao:Number = Math.round((_global.acertos/_global.cliques)*100);
- if (isNaN(precisao)) {
- precisao = 0;
- }
- estatisticas_txt.text = “Cliques: “+_global.cliques+” “+”Acertos: “+_global.acertos+” “+”Erros: “+_global.erros+” “+”Precisão: “+precisao+”%”+” “+”Nível: “+_global.nivel;
- }
- /*
- Função que retorna um inteiro aleatório entre dois números especificados. Isto permite que você inclua algumas diferenças sutis de tamanho e
- velocidade para o MC no Stage.
- */
- function randRange(minNum:Number, maxNum:Number):Number {
- return (Math.floor(Math.random()*(maxNum-minNum+1))+minNum);
- }
Tutorial extraído do site MXStudio. Veja na íntegra >>