Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Álan_nov

[Resolvido] Problemas ao criar um pause global

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.