Pedroalves 1 Denunciar post Postado Julho 3, 2014 estou a ter o estes erro quando o jogador diz que quer voltar a jogar o erro é este jogarjogarGame -- OverjogarGame -- OverTypeError: 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
Pedroalves 1 Denunciar post Postado Julho 9, 2014 problema no flash foi resolvido Compartilhar este post Link para o post Compartilhar em outros sites