Ir para conteúdo

POWERED BY:

Arquivado

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

MonkeyFly

Pré-loader com TypeError: Error #1009

Recommended Posts

Olá pessoal, então tenho o seguinte arquivo que e uma animação contendo alguns menus e que faz a chamada de outras 3 animações externas. Até aeh tudo bem funcionando beleza, mais quando eu uso um pre-loader pra carregar esse arquivo principal ele da o seguinte erro :

 

" TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula. at Menu_fla::MainTimeline/frame1() "

 

Pela descrição da mensagem o erro acontece ao tentar carregar a cena Menu.swf que e o arquivo principal mais eu já olhei e não consigo encontrar o erro caso alguém já tenha passado por isso e possa me ajudar agradeço desde já.

 

Segue Abaixo o Código do Projeto Principal e do Pre-Loader:

Menu.swf

// Declarando variaveis de controle de animação para iniciar
var portao_in=false;
var interfone_in=false;
var cerca_in=false;
var iluminaçao_in=false;
var alarme_in=false;
var cameras_in=false;
var cftv_in=false;
// Declarando variaveis de controle de animação para finalizar
var portao_out=false;
var interfone_out=false;
var cerca_out=false;
var iluminaçao_out=false;
var alarme_out=false;
var cameras_out=false;
var cftv_out=false;

var conta_luz:int=0;
var noite=false;

//Declarando variaveis para carregar janelas de popup com informaçoes sobre produtos
var container_portao:Container_portao=new Container_portao  ;
var container_interfone:Container_interfone=new Container_interfone  ;
var container_cerca:Container_cerca=new Container_cerca  ;
var container_iluminaçao:Container_iluminaçao=new Container_iluminaçao  ;
var container_cftv:Container_cftv=new Container_cftv  ;
var container_cameras:Container_cameras=new Container_cameras  ;
var container_alarme:Container_alarme=new Container_alarme  ;

//Declarando ouvintes para iniciar cenas, 1, 2 e 3
btn_cena_1.addEventListener(MouseEvent.CLICK, _clica);
btn_cena_2.addEventListener(MouseEvent.CLICK, _clica);
btn_cena_3.addEventListener(MouseEvent.CLICK, _clica);

//Declarando ouvintes para iniciar janelas de popup 
btn_portao.addEventListener(MouseEvent.CLICK, _info_in);
btn_interfone.addEventListener(MouseEvent.CLICK, _info_in);
btn_alarme.addEventListener(MouseEvent.CLICK, _info_in);
btn_luz.addEventListener(MouseEvent.CLICK, _info_in);
btn_cerca.addEventListener(MouseEvent.CLICK, _info_in);
btn_cftv.addEventListener(MouseEvent.CLICK, _info_in);
btn_camera.addEventListener(MouseEvent.CLICK, _info_in);


//Declarando ouvintes para fechar janelas de popup 
container_portao.btn_sair_portao.addEventListener(MouseEvent.CLICK, _info_out);
container_interfone.btn_sair_interfone.addEventListener(MouseEvent.CLICK, _info_out);
container_cerca.btn_sair_cerca.addEventListener(MouseEvent.CLICK, _info_out);
container_alarme.btn_sair_alarme.addEventListener(MouseEvent.CLICK, _info_out);
container_cameras.btn_sair_cameras.addEventListener(MouseEvent.CLICK, _info_out);
container_cftv.btn_sair_cftv.addEventListener(MouseEvent.CLICK, _info_out);
container_iluminaçao.btn_sair_luz.addEventListener(MouseEvent.CLICK, _info_out);

//Declarando o Stage como ouvinte para iniciar a função que checa as mudanças das variaveis de inicio e fim de animação
stage.addEventListener(Event.ENTER_FRAME, _anima);

casa_mc.efeito_luz.stop();
casa_mc.lampada_jardim_1.stop();
casa_mc.lampada_jardim_2.stop();
casa_mc.sombra_mc.alpha=0.0;

// Iniciando a Função responsavel por carregar as canimaçoes da cena, 1 , 2 e 3
function _clica(e:MouseEvent):void {
var carregar_cena:Loader= new Loader();
var arquivo_cena:URLRequest;
if (e.target.name=="btn_cena_1") {
	arquivo_cena=new URLRequest("Inicio Portao.swf");
	carregar_cena.load(arquivo_cena);
	addChild(carregar_cena);
}
if (e.target.name=="btn_cena_2") {
	arquivo_cena=new URLRequest("Inicio Interfone.swf");
	carregar_cena.load(arquivo_cena);
	addChild(carregar_cena);
}
if (e.target.name=="btn_cena_3") {
	arquivo_cena=new URLRequest("Inicio Cerca.swf");
	carregar_cena.load(arquivo_cena);
	addChild(carregar_cena);
}
}

//Iniciando Função responsavel por carregar as janelas de popups e imagens de produtos
function _info_in(e:MouseEvent):void {
if (e.target.name=="btn_portao") {
	container_portao.scaleX=0.1;
	container_portao.scaleY=0.1;
	container_portao.x=414;
	container_portao.y=150;
	addChild(container_portao);
	portao_in=true;
}
if (e.target.name=="btn_interfone") {
	container_interfone.scaleX=0.1;
	container_interfone.scaleY=0.1;
	container_interfone.x=414;
	container_interfone.y=150;
	addChild(container_interfone);
	interfone_in=true;
}
if (e.target.name=="btn_cerca") {
	container_cerca.scaleX=0.1;
	container_cerca.scaleY=0.1;
	container_cerca.x=414;
	container_cerca.y=150;
	addChild(container_cerca);
	cerca_in=true;
}
if (e.target.name=="btn_alarme") {
	container_alarme.scaleX=0.1;
	container_alarme.scaleY=0.1;
	container_alarme.x=414;
	container_alarme.y=150;
	addChild(container_alarme);
	alarme_in=true;
}
if (e.target.name=="btn_luz") {
	container_iluminaçao.scaleX=0.1;
	container_iluminaçao.scaleY=0.1;
	container_iluminaçao.x=414;
	container_iluminaçao.y=150;
	addChild(container_iluminaçao);
	iluminaçao_in=true;
}
if (e.target.name=="btn_cftv") {
	container_cftv.scaleX=0.1;
	container_cftv.scaleY=0.1;
	container_cftv.x=414;
	container_cftv.y=150;
	addChild(container_cftv);
	cftv_in=true;
}
if (e.target.name=="btn_camera") {
	container_cameras.scaleX=0.1;
	container_cameras.scaleY=0.1;
	container_cameras.x=414;
	container_cameras.y=150;
	addChild(container_cameras);
	cameras_in=true;
}
}

//Iniciando Função responsavel pela mudança de estado da animação (Fechar janelas de popups)
function _info_out(e:MouseEvent):void {
if (e.target.name=="btn_sair_portao") {
	portao_out=true;
}
if (e.target.name=="btn_sair_interfone") {
	interfone_out=true;
}
if (e.target.name=="btn_sair_luz") {
	iluminaçao_out=true;
}
if (e.target.name=="btn_sair_cerca") {
	cerca_out=true;
}
if (e.target.name=="btn_sair_cameras") {
	cameras_out=true;
}
if (e.target.name=="btn_sair_alarme") {
	alarme_out=true;
}
if (e.target.name=="btn_sair_cftv") {
	cftv_out=true;
}
}

//Iniciando Função responsavel por checar estados das variaveis de inicio e fim das animaçoes
function _anima(e:Event):void {
conta_luz++;
if (conta_luz>=150&&noite==false) {
	casa_mc.sombra_mc.alpha+=0.02;
}
if (conta_luz>=200&&noite==false) {
	casa_mc.sombra_mc.alpha=1.0;
	casa_mc.efeito_luz.gotoAndStop(2);
	casa_mc.lampada_jardim_1.gotoAndStop(2);
	casa_mc.lampada_jardim_2.gotoAndStop(2);
	noite=true;
}
if (conta_luz>=350&&noite) {
	casa_mc.sombra_mc.alpha-=0.01;
}
if (conta_luz>=450) {
	noite=false;
	//casa_mc.sombra_mc.alpha=0.0;
	casa_mc.efeito_luz.gotoAndStop(1);
	casa_mc.lampada_jardim_1.gotoAndStop(1);
	casa_mc.lampada_jardim_2.gotoAndStop(1);
	conta_luz=0;
}
// Checa se a animação pode ser iniciada
if (portao_in) {
	container_portao.scaleX+=0.1;
	container_portao.scaleY+=0.1;
	if (container_portao.scaleX>=1) {
		portao_in=false;
	}
}

if (interfone_in) {
	container_interfone.scaleX+=0.1;
	container_interfone.scaleY+=0.1;
	if (container_interfone.scaleX>=1) {
		interfone_in=false;
	}
}

if (cerca_in) {
	container_cerca.scaleX+=0.1;
	container_cerca.scaleY+=0.1;
	if (container_cerca.scaleX>=1) {
		cerca_in=false;
	}
}

if (alarme_in) {
	container_alarme.scaleX+=0.1;
	container_alarme.scaleY+=0.1;
	if (container_alarme.scaleX>=1) {
		alarme_in=false;
	}
}

if (iluminaçao_in) {
	container_iluminaçao.scaleX+=0.1;
	container_iluminaçao.scaleY+=0.1;
	if (container_iluminaçao.scaleX>=1) {
		iluminaçao_in=false;
	}
}

if (cftv_in) {
	container_cftv.scaleX+=0.1;
	container_cftv.scaleY+=0.1;
	if (container_cftv.scaleX>=1) {
		cftv_in=false;
	}
}
if (cameras_in) {
	container_cameras.scaleX+=0.1;
	container_cameras.scaleY+=0.1;
	if (container_cameras.scaleX>=1) {
		cameras_in=false;
	}
}

// Checa se a animação pode ser finalizada
if (portao_out) {
	container_portao.scaleX-=0.2;
	container_portao.scaleY-=0.2;
	if (container_portao.scaleX<=0.1) {
		portao_out=false;
		removeChild(container_portao);
	}
}

if (interfone_out) {
	container_interfone.scaleX-=0.2;
	container_interfone.scaleY-=0.2;
	if (container_interfone.scaleX<=0.1) {
		interfone_out=false;
		removeChild(container_interfone);
	}
}

if (cerca_out) {
	container_cerca.scaleX-=0.2;
	container_cerca.scaleY-=0.2;
	if (container_cerca.scaleX<=0.1) {
		cerca_out=false;
		removeChild(container_cerca);
	}
}

if (alarme_out) {
	container_alarme.scaleX-=0.2;
	container_alarme.scaleY-=0.2;
	if (container_alarme.scaleX<=0.1) {
		alarme_out=false;
		removeChild(container_alarme);
	}
}

if (iluminaçao_out) {
	container_iluminaçao.scaleX-=0.2;
	container_iluminaçao.scaleY-=0.2;
	if (container_iluminaçao.scaleX<=0.1) {
		iluminaçao_out=false;
		removeChild(container_iluminaçao);
	}
}

if (cameras_out) {
	container_cameras.scaleX-=0.2;
	container_cameras.scaleY-=0.2;
	if (container_cameras.scaleX<=0.1) {
		cameras_out=false;
		removeChild(container_cameras);
	}
}

if (cftv_out) {
	container_cftv.scaleX-=0.2;
	container_cftv.scaleY-=0.2;
	if (container_cftv.scaleX<=0.1) {
		cftv_out=false;
		removeChild(container_cftv);
	}
}

}

 

Pre-loader.swf:

//Importando classes para criar o pre-loader
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

//Criando variaveis responsaveis pelo load do arquivo
var meuLoader:Loader = new Loader();
var minhaUrl:URLRequest=new URLRequest("Menu.swf");

//Var responsavel pelo tamnaho da barra de load
var tamanho:Number=0;

//Iniciando Items necessarios para a tela do load e declarando o tamanho da barra
meuLoader.load(minhaUrl);
container_mc.barra_mc.width=tamanho;

//Adicionando Eventos aos ouvintes
meuLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, _progresso);
meuLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _mostra);

//Iniciando Eventos
function _progresso(e:ProgressEvent):void {
container_mc.text_box.text=""+Math.floor((e.bytesLoaded / e.bytesTotal)*100)+"%";
tamanho=Math.floor((e.bytesLoaded / e.bytesTotal)*400);
container_mc.barra_mc.width=tamanho;
}
function _mostra(e:Event):void {
addChild(meuLoader);
removeChild(container_mc);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o problema seja com os objetos exportados pela library.

 

Experimente: File > Publish Settings > clique no botão Settings , onde tem altere o 'Export classes in frame: 1" , altere para >> 2.

 

Salve e teste.

 

Isso resolveu para outros colegas aqui do fórum. Aprendi com o Bruno Bispo.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Bom dia pessoal aqui do iMaster e um Feliz Ano Novo !

Então seguindo o conselho do amigo de fazer o pre-loader por scene's não da mais aquele erro, mas porém, o pre-loader na hora de aparecer na tela, demora um pouco aparece geralmente quando esta em 18% do carregamento da barra, coisa de uns 12 - 18 seg oque e muito quando comparado com o pre-loader externo que no caso aparece quase q de imediato pois ele conte apenas 5kb's e não possui nada na Biblioteca para ser carregado.

Mas eu gostaria de agradecer a participação e ajuda de todos, muito obrigado !!!

 

Opá, Olha só que sorte, após postar minha ultima mensagem aqui, resolvi dar uma olhada novamente em todo o codigo, e acabei descobrindo o problema do erro.

 

Vou explicar da forma que eu "ACHO" que era o erro.

 

Pois bem meu Pre-loader e um arquivo separado que carrega outro swf, ate aeh tudo bem, só que esse aquivo de pre-loader carrega o novo swf para dentro do seu stage. Aeh que ta a grande sacada no meu Menu.swf eu tinha um Ouvinte que era o Stage.addEventListener... quando o pre-loader carregava o arquivo ele não conseguia encontrar o Ouvinte Stage e por isso dava a mensagem de Objeto Nulo ou Não encontrado, tendo descoberto isso simplesmente mudei o ouvinte para Casa_mc que e um movie clipe que inicia junto com a animação e dispara a minha Função _anima fazendo o mesmo papel do meu Stage.

Ate uma próxima vez !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola MonkeyFly,

 

o AS3 do preloader externo fica no mesmo codigo do arquivo principal?

 

Tambem notei esse delay no preloader na "scene" e queria testar do teu jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, IAMDIX, intao esse arquivo de pre-loder externo e um arqvuio separado outro swf.

Eu prefiro usar assim pq um pre-loader a ideia e ser instantaneo, uma vez que um pre loader e uma coisa simples que contenha alih em seu arquivo de 5kb a 30kb no maximo dependendo do pre-loader, estando separado ele carrega mais rapido partindo do principio que o Flash carrega primeiro sua Biblioteca e seu Codigo pra depois carregar suas imagens, em um arquivo muito grande maior ainda sera o delay do pre-lodar e fazendo ele separado não tem esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como é que ele é chamado ?

 

o AS3 do preloader que voce postou tem que estar aonde?

 

Não estoá claro como funciona pois mesmo que o usuario clica em um botão para chamar a pagina(swf) como é que pode chamar outro swf? (do preloader)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare que aqui nesse trecho do código do pre-loader "var minhaUrl:URLRequest=new URLRequest("Menu.swf");"

Estou falando pra ele quem ele vai carregar que no caso seria o Menu.swf mais pode ser qualquer arquivo que você queira que tenha um pre-loader.

 

Aeh quando você for postar seu swf em uma pagina web por exemplo você nao coloca pra carregar o arquivo Menu.swf e sim o pre-loader. Aeh o pre-loader se encarrega de chamar o arquivo que você queira apos carregado.

 

Qualquer outra duvida se quiser Add msn: marcos-eduardo14@hotmail.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas voces acham mesmo que com um arquivo de 97kb........ no caso meu swf principal vou precisar mesmo do preloader?

 

Testando ctrl+b na dsl (32,6kbs) da 2 segundos

testando no servidor wamp pelo wi-fi do notebook (velox de 1 mega dividido entre pc e note)um pouco mais rapido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu geralmente costumo fazer assim qualquer arquivo acima de 30kbs eu coloco um pre-loader pq quem tiver um net boa nem vai ver então não atrapalha mais se alguém tiver uma net bem ruim e sabemos que muitas pessoas tem, ele vai ajudar. Oque juga e o tamanho do seu pre-loader pra um arquivo desse tamanho faça um pre-loader bem pequeno no max 10kb

esse que eu postei tem 10kbs mais ele tem uma foto sem a foto ele fica com 5kb, aparece instantaneamente na tela.

Mais também quando você for trabalhar com outros tipos de arquivo você pode caprichar no pre-loader e usar um pouco mais de designe e mais kbs. Depende do uso da sua Animação.

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.