Álan_nov 0 Denunciar post Postado Junho 18, 2010 Buenas! Preciso de ajuda em relação a um pause global para um jogo de tiro ao alvo que estou fazendo. obs: vai caindo uma bolinhas e com o mouse tem que acertar nelas, bem básico. Para quando chegasse no nível final ou tantos erros, parasse toda timeline e aparece uma mensagem que você perdeu e após, uma nova mensagem do tipo: jogar novamente ou sair. Ai quando terminado o jogo, aparecer uma telinha com nome e twitter da pessoa para enviar por e-mail. Nesse e-mail irá conter a estatística do jogo. Desde já agradeço a todos que ajudarem. Ai segue as actions stop(); /* - Animação Programada Este exemplo mostra como criar, posicionar, animar, testar acerto da figura com o mouse e deletar MCs */ //var numeros; //var tempo; //numeros = 10; //function conta(){ //numeros = numeros - 1; //txt.text = numeros; //if (numeros <= 0){ //clearInterval(tempo); //txt.text = "tempo acabado"; //} //} //txt.text = numeros; //stop(); //tempo = setInterval(conta, 950); //_global.frameAtual = 0; //frameAtual.stop(); // 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 = 5; var larguraStage:Number = 900; //Definição da área dos cliques var alturaStage:Number = 525; // 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++; } }; var mostra1:TextFormat = new TextFormat(); mostra1.bold = false; mostra1.font = "Helvetica-Narrow"; mostra1.size = 20; mostra1.color = 0xffffff; var mostra2:TextFormat = new TextFormat(); mostra2.bold = false; mostra2.font = "Helvetica-Narrow"; mostra2.size = 20; mostra2.color = 0xffffff; var mostra3:TextFormat = new TextFormat(); mostra3.bold = false; mostra3.font = "Helvetica-Narrow"; mostra3.size = 20; mostra3.color = 0xffffff; var mostra4:TextFormat = new TextFormat(); mostra4.bold = false; mostra4.font = "Helvetica-Narrow"; mostra4.size = 20; mostra4.color = 0xffffff; var mostra5:TextFormat = new TextFormat(); mostra5.bold = false; mostra5.font = "Helvetica-Narrow"; mostra5.size = 20; mostra5.color = 0xffffff; Mouse.addListener(mouseListener); // Define um TextFormat que é usado para formatar o campo estatisticas_txt. var meu_textoFormatado:TextFormat = new TextFormat(); meu_textoFormatado.bold = false; meu_textoFormatado.font = "Helvetica-Narrow"; meu_textoFormatado.size = 20; meu_textoFormatado.color = 0xffffff; Mouse.addListener(mouseListener); // Define um TextFormat que é usado para formatar o campo estatisticas_txt. var meu_textoFormatado:TextFormat = new TextFormat(); meu_textoFormatado1.bold = false; meu_textoFormatado1.font = "Helvetica-Narrow"; meu_textoFormatado1.size = 20; meu_textoFormatado1.color = 0xffffff; Mouse.addListener(mouseListener); // Define um TextFormat que é usado para formatar o campo estatisticas_txt. var meu_textoFormatado:TextFormat = new TextFormat(); meu_textoFormatado2.bold = false; meu_textoFormatado2.font = "Helvetica-Narrow"; meu_textoFormatado2.size = 20; meu_textoFormatado2.color = 0xffffff; Mouse.addListener(mouseListener); // Define um TextFormat que é usado para formatar o campo estatisticas_txt. var meu_textoFormatado:TextFormat = new TextFormat(); meu_textoFormatado3.bold = false; meu_textoFormatado3.font = "Helvetica-Narrow"; meu_textoFormatado3.size = 20; meu_textoFormatado3.color = 0xffffff; Mouse.addListener(mouseListener); // Define um TextFormat que é usado para formatar o campo estatisticas_txt. var meu_textoFormatado:TextFormat = new TextFormat(); meu_textoFormatado4.bold = false; meu_textoFormatado4.font = "Helvetica-Narrow"; meu_textoFormatado4.size = 50; meu_textoFormatado4.color = 0xffffff; // Cria um campo texto para mostrar as estatísticas do jogador. this.createTextField("estatisticas_txt", 5000, 280, 525, 700, 75); // Aplica o TextFormat no campo texto. estatisticas_txt.setNewTextFormat(meu_textoFormatado); estatisticas_txt.selectable = false; updateStats(); // Cria um campo texto para mostrar as estatísticas do jogador. this.createTextField("estatisticas_txt1", 5000, 280, 550, 700, 75); // Aplica o TextFormat no campo texto. estatisticas_txt1.setNewTextFormat(meu_textoFormatado1); estatisticas_txt1.selectable = false; updateStats(); // Cria um campo texto para mostrar as estatísticas do jogador. this.createTextField("estatisticas_txt2", 5000, 350, 400, 700, 75); // Aplica o TextFormat no campo texto. estatisticas_txt2.setNewTextFormat(meu_textoFormatado2); estatisticas_txt2.selectable = false; updateStats(); // Cria um campo texto para mostrar as estatísticas do jogador. this.createTextField("estatisticas_txt3", 5000, 280, 600, 700, 75); // Aplica o TextFormat no campo texto. estatisticas_txt3.setNewTextFormat(meu_textoFormatado3); estatisticas_txt3.selectable = false; updateStats(); // Cria um campo texto para mostrar as estatísticas do jogador. //this.createTextField("estatisticas_txt4", 5000, 280, 500, 700, 75); // Aplica o TextFormat no campo texto. //estatisticas_txt4.setNewTextFormat(meu_textoFormatado4); //estatisticas_txt4.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, 6); // Observe que o nome do MC a seguir é obtido pelo Flash através do Identifier do 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, 250); /* 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; //if (_global.nivel == 1){ //trace("nível 2"); //mcnivel.gotoAndPlay(2); //stop(); //} /* Configura um valor aleatório para _x. Agora, ao invés de todos os logos voarem sobre o mesmo caminho, eles variam sua posição vertical levemente. 500 e 100 */ thisMC._x = Math.round(Math.random()*400)+350; /* 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._y += 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._x -= .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._y>alturaStage) { _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 == 25){ mcniveljogador.gotoAndPlay("2"); } mcniveljogador.txtniveljogador.text = "Nível Inciante"; if (_global.acertos == 50){ mcniveljogador.gotoAndPlay("95"); } mcniveljogador.txtniveljogador1.text = "Nível Médio"; if ((_global.acertos%40) == 0) { _global.nivel++; // Mudança de nível mcnivel.gotoAndPlay(2); //this.gotoAndPlay("nivelacima"); } 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 xmov = this._x; var gravity = 20; // Cria um evento onEnterFrame para a instância do MC atual. this.onEnterFrame = function() { xmov += gravity; ymov *= 0.5; /* incrementa a rotação do MC atual no sentido horário em 5 graus. */ this._rotation += 1; /* Configura as propriedades _x e _y do MC no Stage, isto permite-nos fazer com que a queda seja mais realista */ this._y += xVelocidade; this._x = 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._x>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; //estatisticas_txt.text = "Cliques: "+_global.cliques+""; mcestatisticas.txtcliques.text = _global.cliques; mcestatisticas.txtacertos.text = _global.acertos; mcestatisticas.txterros.text = _global.erros; mcestatisticas.txtprecisao.text = precisao+"%"; mcestatisticas.txtnivel.text = _global.nivel; //estatisticas_txt3.text = "Acertos: "+_global.acertos+""; //estatisticas_txt2.text = "Erros: "+_global.erros+""; //estatisticas_txt4.text = "Precisão: "+precisao+"%"; //estatisticas_txt4.text = "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); } Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 21, 2010 Limpa ai 50% do seu código é só repetição... E depois quando chegar a X numero de acertos ou erros jogue para o nextFrame() onde não contém esse código rodando e ta resolvido seu problema Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 22, 2010 huahauhuahua ok! Tenho esse costume de deixar alguns códigos em comentário, pra não ter que digitá-los novamente caso precise. Valeu a dica vou fazer isso lá. Cara, mas já de cara vou ter esse problema que citei antes, como posso parar essa ação das bolinhas caindo? Sendo que elas caem aleatórias e a princípio não tenho nenhuma função para controlá-las? Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 22, 2010 No momento que você mandar um nextFrame com um blank frame no na sequencia onde tem o esse código ai... você vai tar apagando todo o Action que ta sendo executado de uma feita só... ou seja... bolinhas movimentos... tudo vai deixar de existir... a unica coisa que continuaria a existir seriam variaveis globais caso você estaja usando alguma. Sugiro variaveis globais para pegar os resultados apenas. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 22, 2010 No momento que você mandar um nextFrame com um blank frame no na sequencia onde tem o esse código ai... você vai tar apagando todo o Action que ta sendo executado de uma feita só... ou seja... bolinhas movimentos... tudo vai deixar de existir... a unica coisa que continuaria a existir seriam variaveis globais caso você estaja usando alguma. Sugiro variaveis globais para pegar os resultados apenas. Abraços Bah... só estou usando variáveis globais! Já alterei para variáveis e mesmo assim elas continuam com ações mesmo em outro frame. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 22, 2010 Cara você não ta usando nenhuma classe Se você colocar um BLANK frame (frame em branco) depois do frame que contém as actions, não é para acontecer nada!!!! pois não tem código nenhum rodando! Simples assim.. E é um erro gigantesco usar variaveis globais sem necessidade!!! se você só vai usar os valores naquele frame para que usar global???? Ela vai ser valida pra onde mais???? as unicas coisas que você quer são os valores dos resultados... esses sim tem que ser global Ai eu assumo que suas bolinhas começam a aparecer com código aqui: // Inclui um evento onEnterFrame na timeline principal para que um novo logo seja constantemente gerado no jogo. this.onEnterFrame = function() { Correto? ai você só tem que apagar o enterframe :) Primeiramente você vai mudar o this para _root... assim você vai fazer com que o root fique com enterframe e assim você vai poder definir quem você vai apagar ou não... E ai vai fazer assim: bt_resultado = function(){ delete _root.onEnterFrame; nextFrame(); } Ai se o enterframe estiver reealmente no root TUDO vai parar :) e deixar de funcionar... ai você passa para o proximo frame. Como você cria MovieClips com código eles flutuam sobre os seus frames... e por isso continuam funcionando porque você não desligou o enterframe Eu não tenho como testar esse código, pois tem varias coisas que ficariam faltando... Então acredito que essa seria a solução pro seu problema. Ou posta ai o fla que eu olho pra ti... Se quiser manda por MP Mas seria melhor se liberar para que todo mundo possa testar e ver o que acontece, para que assim não cometam o mesmo erro. Caso seja resolvido o problema. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 22, 2010 ok, vou postar aqui o fla. Assim você poderá me ajudar melhor Porque só falando é meio complicado pra ambos entender (ainda mais para mim que não manjo de AS2 e As3). Desde já agradeço novamente. Segue o link para baixar http://www.4shared.com/file/xXuvkjXn/game.html Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 22, 2010 Exatamente o que eu falei... Troquei seu this.onEnterFrame para _root.onEnterFrame e fiz logo abaixo dele: if(erros == 15){ delete _root.onEnterFrame; nextFrame(); } E tudo para de funcionar ;) exemplo: _root.onEnterFrame = function() { trace(erros); if(erros == 15){ delete _root.onEnterFrame; nextFrame(); } // Inclui aleatoriamente um novo logo if (randRange(0, 25) == 0) { // anexa uma nova instância do logo da Library no Stage e define uma profundidade única var randomLogo:Number = randRange(1, 6); // Observe que o nome do MC a seguir é obtido pelo Flash através do Identifier do Linkage var thisMC:MovieClip = this.attachMovie("logo"+randomLogo+"_mc", "logoAlvo"+cProfundidade+"_mc", cProfundidade); cProfundidade++; .... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 22, 2010 Cara valeu, funcia que é uma maravilha! Agora tem outro problema, após ir para o próximo frame, coloquei um prevFrame para caso a pessoa queira jogar novamente, iniciei o jogo. Até ai beleza, o x questão é que algumas estatísticas continuam funcionando. Ex: Precisão e os cliques. A cada clique que você der na tela mesmo tendo saído deste frame do jogo, ele continua a contagem e automaticamente a precisão varia conforme a quantidade decliques que você deu. Gostaria de saber como eu posso zerar isso, ao entrar novamente no frame do jogo? Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 Só zerar todas as variaveis ao entrar no frame :) Inicie sempre todas as variaveis no começo do seu script fora do enterFrame Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 23, 2010 As variáveis já estão fora do enterFrame. Veja você mesmo no fla que postei aqui. Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 Sim, mas em momento algum você zera as mesmas :) Você já as cria com valores ;) Basta zerar... Exemplo: mcestatisticas.txtcliques.text = ""; mcestatisticas.txtacertos.text = ""; mcestatisticas.txterros.text = ""; mcestatisticas.txtprecisao.text = ""; mcestatisticas.txtnivel.text = ""; Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 23, 2010 Pensei que fosse isso que te disse, mas não é. Fora do frame do jogo, ele está normal. Ao jogar novamente os cliques são duplicados e a precisão inicia dos 50%. E isso vai mudando até os cliques fazer uma contagem de 5 em 5, sendo que foi clicado apenas uma vez e a precisão iniciar dos 25%. Vou te passar novamente o fla. http://www.4shared.com/file/cVWX1INO/game1.html Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 Adiciona isso aqui: Mouse.removeListener(mouseListener); No if que deleta o onEnterFrame Pois o listener do mouse ta se duplicando por isso acontece isso ;) Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 23, 2010 Bingo! hauhauha deu certo! Porém agora sumiu o cursor personalizado do mouse. :/ Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 Sim quando o jogo vai pro proximo frame ele esquece o efeito de mouse... Mas ai só fazer o código puxa a imagem novamente... mcX._x = _xmouse; mcX._y = _ymouse; ou algo assim Tu quem sabe Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 23, 2010 Não estou conseguindo fazer aparecer o mouse. Será que pode ser por causa disso? Mouse.removeListener(mouseListener); // Inclui um evento onEnterFrame na timeline principal para que um novo logo seja constantemente gerado no jogo. //this.onEnterFrame = function() { _root.onEnterFrame = function() { if(erros == 10){ delete _root.onEnterFrame; Mouse.removeListener(mouseListener); gotoAndStop("gameover"); } Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 Para aparecer a setinha você tem que fazer Mouse.show() Porque quando você lá no começo usou esse código aqui: Mouse.hide(); Ai se tem que fazer ele aparecer novamente... Tem certeza que tu criou isso rapaz? To começando a ter minhas dúvidas heim... -.- No proximo frame se quiser continuar com a lupinha da vida use: Mouse.hide(); this.onMouseMove = function(){ alvo_mc._x = _xmouse; alvo_mc._y = _ymouse; } Caso só queira fazer aparecer faça como eu disse use Mouse.show(); Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Álan_nov 0 Denunciar post Postado Junho 23, 2010 Deu certo! Não lembro de ter dito que eu havia criado? Eu peguei na net um exemplo e fui modificando. E agora como faço pra pegar as estatísticas do jogo (vaiáveis), quando tiver ganhado o jogo? Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Junho 23, 2010 HAUeoAHEoiaheio Aiai... Bom ai você usa as variaveis como globais como tava lá no começo comentadas _global.error etc... Abraços Compartilhar este post Link para o post Compartilhar em outros sites