Ir para conteúdo

Arquivado

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

Pedroalves

problemas no flash

Recommended Posts

estou a ter o estes erro quando o jogador diz que quer voltar a jogar

o erro é este jogar
jogar
Game -- Over
jogar
Game -- Over
TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula.
at jogo/onGameOver()

import flash.events.MouseEvent;
import flash.events.Event;
import flash.system.fscommand;



jogar.btexto.text="SIM";
voltar.btexto.text="NÃO";

//breplay.btext.text = "??";
jogar.addEventListener(MouseEvent.CLICK, replay);

// evento na instancia breplay
voltar.addEventListener(MouseEvent.CLICK, volta);

function replay(e:MouseEvent) 
{
	trace("jogar");
	
	// nota isto tem que ser feito antes de ir para a frame 1
	// onde já nao existe o objecto breplay
	jogar.removeEventListener(MouseEvent.CLICK, replay);
	replays();
vegameorvera();
	gotoAndStop("Comecar");
	
	// replays();
	
	 //resetTimer():
	 }
function volta(e:MouseEvent) 
{
	trace("VOLTAR");

	// nota isto tem que ser feito antes de ir para a frame 1
	// onde já nao existe o objecto breplay
	voltar.removeEventListener(MouseEvent.CLICK,volta);
	
		gotoAndStop("MenuPrincipal");
}



o coidgo do class principal

package  {
	
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	
	// -- Eventos
	import flash.events.KeyboardEvent;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	
	// -- Keyboard
	import flash.ui.Keyboard;
	
	// -- Mouse
	import flash.ui.Mouse;
	
	// -- Classes de som
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;
	
	// -- URL request (to load external files)
	import flash.net.URLRequest;
	
	// Utilities
	import flash.utils.getTimer;
	import flash.utils.Timer;
	
	public class jogo extends MovieClip {
		
		var estado_keyUp	:Boolean = false;
		var estado_keyDown	:Boolean = false;
		var estado_keyRight	:Boolean = false;
		var estado_keyLeft	:Boolean = false;
		
		// -- Velocidade em x e y do canhão
		var vx				:Number = 3.0;
		var vy				:Number = 3.0;
var dir 			: int = 0; 
		// -- Mira
		var myMira			: Mira = new Mira();
		
		// -- Array de Balas
		var asBalas 		: Array = new Array();
		
		// -- Array de Inimigos
		var osInimigos 		: Array = new Array();
		const numzombies = 8;
		const numInimigos = 2;
		var osZombies 		: Array = new Array();
		// -- Variáveis para efeito de som existente na Library
		var inimigoSomCrash        : somCrash;
		var inimigoSomCrashChannel : SoundChannel;
		var inimigoSomCrashPlaying : Boolean = false;
		// -- Som da Library despoletado através de um timer
		var theEndSom        : theEnd;
		var theEndSomChannel : SoundChannel;
		var theEndSomPlaying : Boolean = false;
		
		// -- Variáveis de suporte a um ficheiro de música externo
		var musicaFundo: Sound;
		var musicaFundoChannel : SoundChannel;
		var musicaFundoReq:URLRequest;
		var musicaFundoTransform:SoundTransform;
		
		// -- Inicialização de um timer
		var myTimerA: int = getTimer();
		
		// -- Inicialização de um Timer que chama uma função depois de 1.5 segundos
		var myTimerB:Timer = new Timer(1500);
		
		public function jogo() {
			
			
			
			// -- Detecta o Game Over
		
			
			// -- Actualiza o relógio do jogo
			//addEventListener(Event.ENTER_FRAME, calculoRelogio);
			
			// -- Sons
			// -- ----------------------------------------------------
			// -- Cria uma instância de som
			inimigoSomCrash = new somCrash();
			theEndSom = new theEnd();

			// -- Request e play de uma música
			musicaFundoReq = new URLRequest("sounds/RHB.mp3");
			musicaFundo = new Sound(musicaFundoReq);
			musicaFundoChannel = musicaFundo.play();
			musicaFundoTransform = new SoundTransform();
			
			// -- Botões de Volume
			
	
	}
	private function vegameorvera(){
		
		addEventListener(Event.ENTER_FRAME,onGameOver);
		
		}
		
		private function mudadireccao(e:KeyboardEvent) {

			// set direction according to the pressed key
			// muda estado de acordo com tecla pressionada
			if (e.keyCode == Keyboard.RIGHT) 			dir =  -1;
			else if (e.keyCode == Keyboard.LEFT)  dir = +1;
			else if (e.keyCode == Keyboard.DOWN)  dir =  0;
			
			if (dir == 0) {
				
				soldado.gotoAndStop("stand");
			}
			
			else soldado.play();
			
			// flips hero horizontally
			// reflexão horizontal
			if (dir == -1) soldado.scaleX = -1;
			if (dir == 1)  soldado.scaleX =  1;
		}
		
		// -- Actualiza estado das 4 teclas (KEY_DOWN)
		private function onActivaTecla(e:KeyboardEvent) {
			if (e.keyCode == Keyboard.DOWN) {
				estado_keyDown = true;
			}
			else if  (e.keyCode == Keyboard.UP) {
				estado_keyUp = true;
			}
			else if  (e.keyCode == Keyboard.RIGHT) {
				estado_keyRight = true;
			}
			else if  (e.keyCode == Keyboard.LEFT) {
				estado_keyLeft = true;
			}
		}
		
		
		// -- Actualiza estado das 4 teclas (KEY_UP)
		private function onInactivaTecla(e:KeyboardEvent) {
			if (e.keyCode == Keyboard.DOWN) {
				estado_keyDown = false;
			}
			else if  (e.keyCode == Keyboard.UP) {
				estado_keyUp = false;
			}
			else if  (e.keyCode == Keyboard.RIGHT) {
				estado_keyRight = false;
			}
			else if  (e.keyCode == Keyboard.LEFT) {
				estado_keyLeft = false;
			}
		}
		
		private function replays(){
			stage.addEventListener(KeyboardEvent.KEY_DOWN, mudadireccao);
			stage.addEventListener(KeyboardEvent.KEY_DOWN,onActivaTecla);
			stage.addEventListener(KeyboardEvent.KEY_UP,onInactivaTecla);
			addEventListener(Event.ENTER_FRAME,onActualiza);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onRatoMexe);
			stage.addEventListener(MouseEvent.CLICK, onDispara);
			stage.addEventListener(Event.ENTER_FRAME, onQuantasBalas);
			addEventListener(Event.ENTER_FRAME, calculoRelogio);
			//addEventListener(Event.ENTER_FRAME,onGameOver);
			
			
		
			
			// -- Actualiza o relógio do jogo
			//
			
			}
		// -- Actualiza posição do canhão
		private function onActualiza(e:Event) {
			if (estado_keyDown) {
				soldado.y += vy;
			}
			if (estado_keyUp) {
				soldado.y -= vy;
			}
			if (estado_keyRight) {
				soldado.x += vx;
			}
			if (estado_keyLeft) {
				soldado.x -= vx;
			}			
		}
		
		
		// -- Actualiza direcção do canhão
		private function onRatoMexe(evt:MouseEvent) {
			// -- Componente x de um vector
			var dx = stage.mou--- - soldado.x;
			// -- Componente y de um vector
			var dy = stage.mouseY - soldado.y;
			// -- Ângulo em radianos
			var ang = Math.atan2(dy,dx);
			
		}
		
		
		// -- Criação de uma Bala
		private function onDispara (evt:MouseEvent) {
			// -- componente x do vector
			var dx = stage.mou--- - soldado.x;
			// -- componente y do vector
			var dy = stage.mouseY - soldado.y;
			// -- ângulo em radianos
			var ang = Math.atan2(dy, dx);
			var b = new bala(soldado.x, soldado.y, ang);
			asBalas.push(b);
			addChild(b);
		}
		
		
		// -- Actualização do mostrador do número de balas
		private function onQuantasBalas (evt:Event) {
			// -- Quantas balas na DisplayList ?
			numBalasT.text = asBalas.length.toString();
		
			// -- Quantos inimigos na displayList ?
			infoNumInimigos.numInimigosT.text = (osInimigos.length+osZombies.length);
		}
		
		
		// -- Inicializa a Mira
		private function initMira() {
			// -- Corresponder com a posição do rato
			myMira.x = stage.mou---;
			myMira.y = stage.mouseY;
			addChild(myMira);
			
			Mouse.hide();
			myMira.startDrag();
			
			// -- Como agora a mira vai andar sempre com o rato,
			// -- acontece que muitos dos eventos do rato são
			// -- "consumidos" pela mira torna-se necessario 
			// -- desactivar os eventos do rato na mira
			myMira.mouseEnabled = false;
		}
		
		
		// -- Remove Bala/Inimigo do array respectivo
		public function removeme(obj:MovieClip) {
			//asBalas.splice(asBalas.indexOf(obj), 1);
			if (obj is bala) {
				asBalas.splice(asBalas.indexOf(obj),1);
			}
			else if (obj is zombie1) {
				osInimigos.splice(osInimigos.indexOf(obj),1);
			}
			else if (obj is zombie2) {
				osZombies.splice(osZombies.indexOf(obj),1);
			}
			//trace(obj);
			obj = null;
		}
		
		
		// -- Inicializar os inimigos
		private function initInimigos() {
			
			for ( var i:int = 0; i < numInimigos; i++ ) {
				var pix 	= Math.random() * (stage.stageWidth - 20) + 10;
				var piy 	= Math.random() * (stage.stageHeight - 20) + 10;
				var inimigo = new zombie1(pix, piy);
				// -- Adição à posição 0 (atrás) da displaylist
				// -- o inimigo que esteja nessa posição é movido para a posição 1
				// -- e os restantes avançam também uma posição
				addChildAt(inimigo, 0);
				osInimigos.push(inimigo);
				inimigo.addEventListener (Event.ENTER_FRAME, veSeMeAcertaram);
			}
		}
		private function initZombies() {
			//inicializa os zombies
			for ( var i:int = 0; i < numzombies; i++ ) {
				var pix 	= Math.random() * (stage.stageWidth - 20) + 10;
				var piy 	= Math.random() * (stage.stageHeight - 20) + 10;
				var inimigo = new zombie2(pix, piy);
				// -- Adição à posição 0 (atrás) da displaylist
				// -- o inimigo que esteja nessa posição é movido para a posição 1
				// -- e os restantes avançam também uma posição
				addChildAt(inimigo, 0);
				osZombies.push(inimigo);
				inimigo.addEventListener (Event.ENTER_FRAME, veSeMeAcertaram1);
			}
		}
		
		private function removetempo(){
			
			addEventListener(Event.ENTER_FRAME, calculoRelogio);
			}
		// -- Verifica se há colisão entre o inimigo e uma bala
		// -- disponível no array de balas
		private function veSeMeAcertaram (evt:Event) : void {
			var inimigo = evt.target as zombie1;
			
			// -- Percorrer o array de balas
			for ( var i:int = 0; i < asBalas.length; i++ ) {
				if ( inimigo.hitTestObject(asBalas[i]) ) {
					inimigo.removeEventListener (Event.ENTER_FRAME, veSeMeAcertaram);
					// -- O obj inimigo, obtido por evt.target
					inimigo.eliminaInimigo();
					
					// -- O obj bala, obtido directamente do array
					asBalas[i].eliminaBala();
					
					// Play do som
					iniciaSomCrash();
					break;
				}
				
			}
		}
		
		
		
		private function veSeMeAcertaram1 (evt:Event) : void {
			
			var inimigo1 = evt.target as zombie2;
			// -- Percorrer o array de balas
			for ( var i:int = 0; i < asBalas.length; i++ ) {
				 if  (inimigo1.hitTestObject(asBalas[i]) ) {
					inimigo1.removeEventListener (Event.ENTER_FRAME, veSeMeAcertaram1);
					inimigo1.eliminaInimigo();
					asBalas[i].eliminaBala();
					iniciaSomCrash();
					break;
					}
			}
		}
		
		
		// -- Detecção de Game Over através do número de inimigos
		function onGameOver(e:Event) {
			
			if(osInimigos.length == 0 && osZombies.length==0)  {
				trace("Game -- Over");
				

				stage.removeEventListener(MouseEvent.MOUSE_MOVE, onRatoMexe);
				stage.removeEventListener(KeyboardEvent.KEY_DOWN, onActivaTecla);
				stage.removeEventListener(KeyboardEvent.KEY_UP, onInactivaTecla);
				stage.removeEventListener(Event.ENTER_FRAME, onActualiza);
				stage.removeEventListener(MouseEvent.CLICK, onDispara);
				stage.removeEventListener(Event.ENTER_FRAME, onQuantasBalas);
				
				
				
				removeEventListener(Event.ENTER_FRAME, calculoRelogio);
				removeEventListener(Event.ENTER_FRAME,onGameOver);
				stopMira();
				
				// -- Variáveis a null
				musicaFundoReq = null;
				musicaFundo = null;
				musicaFundoChannel.stop();
				musicaFundoChannel=null;
				musicaFundoTransform = null;
				
				
				
				
				
				myTimerB.addEventListener(TimerEvent.TIMER, timerFunction);
			
				myTimerB.start();
				myTimerB.reset();
				
			gotoAndStop("Pontuacao");
				
			}
		}
		
		// -- Termina a mira e devolve o cursor por defeito
		function stopMira() {
			myMira.mouseEnabled = true;
			myMira.stopDrag();
			Mouse.show();
			removeChild(myMira);
		}
		
		// -- Função que executa o play do som final
		function timerFunction(event:TimerEvent) {
			//theEndSom.play();
			myTimerB.removeEventListener(TimerEvent.TIMER, timerFunction);
		}
	
		// -- Assinala que o som iniciou e adiciona um listener
	function iniciaSomCrash() {
			inimigoSomCrashChannel = inimigoSomCrash.play();
			inimigoSomCrashPlaying = true;
			inimigoSomCrashChannel.addEventListener(Event.SOUND_COMPLETE,onSomCrashComplete);
		}
		
		// -- Assinala que o som terminou e remove o listener
		function onSomCrashComplete(e:Event) {
			inimigoSomCrashPlaying = false;
			inimigoSomCrashChannel.removeEventListener(Event.SOUND_COMPLETE,onSomCrashComplete);
		}
		
		// -- Mostra o relógio
		function calculoRelogio(event:Event) {
			// -- Milisegundos que passaram
			var timePassed:int = getTimer() - myTimerA;
			// -- Cálculo dos minutos e segundos
			var seconds:int = Math.floor(timePassed/1000);
			var minutes:int = Math.floor(seconds/60);
			seconds -= minutes*60;
			// -- Conversão para uma string com formato de relógio
			infoTempo.tempoT.text = minutes+":"+String(seconds+100).substr(1,2);
		}
		
		// -- Controle do volume: Mais alto
		function volUp(e:MouseEvent) {
			musicaFundoTransform.volume += 0.1;
			if (musicaFundoTransform.volume > 1) {
				musicaFundoTransform.volume = 1;
			}
			musicaFundoChannel.soundTransform = musicaFundoTransform;
		}
		
		// -- Controle do volume: Mais baixo
		function volDown(e:MouseEvent) {
			musicaFundoTransform.volume -= 0.1;
			if (musicaFundoTransform.volume < 0) {
				musicaFundoTransform.volume = 0;
			}
			musicaFundoChannel.soundTransform = musicaFundoTransform;
		}
		
	
}
	}

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.