Ir para conteúdo

POWERED BY:

Arquivado

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

marcos.cardoso

[Resolvido] Eliminar execução de funções de swf externo

Recommended Posts

Boa tarde

 

estou desenvolvendo um aplicativo que chama outros swfs. Possuo um menu, e quando o usuário clica em uma opção o swf relacionado é carregado e o que estava em execução é removido.

O problema é que quando um swf está executando, se eu chamar outro, dá um erro. Então preciso de alguma coisa que elimine as funções dos swfs quando eles são removidos.

 

A seguir o erro:

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

 

Se alguém puder ajudar, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código principal do swf que é chamado:

stage.addEventListener(Event.ENTER_FRAME, _draw);

function _draw(evt:Event):void {

// comandos aqui
// calculo para x
// calculo para y

if (x > 500) { 

	_clean();
}
}

function _clean():void {

//outros comandos

stage.removeEventListener(Event.ENTER_FRAME, _draw);
}

 

O código do swf que chama:

 

startLoad("./swf/funcoes-polinomiais.swf");

function startLoad(url:String) {

var mLoader:Loader = new Loader();

var mRequest:URLRequest = new URLRequest(url);

mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);

mLoader.load(mRequest);
}

function onCompleteHandler(loadEvent:Event) {

container.addChild(loadEvent.currentTarget.content);
}

function removeSWF():void {

this.addEventListener(Event.ENTER_FRAME, _enterframe);

container.removeChildAt(0);
}

 

Já descobri que preciso dar unload() no meu mLoarder.

Mas não funciona pq eu adicionei o swf a um movieclip chamado container para conseguir gerenciar a sobreposição de objetos no palco e conseguir q o swf venha por baixo do menu.

 

Como dar unload nessas circunstâncias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que o problema esta no stage do swf que está sendo chamado. Ele ainda nao existe quando o swf foi carregado.

 

Tenta assim e ve se dá certo.

 

addEventListener(Event.ADDED_TO_STAGE, init);

function init(e:Event):void{ 
stage.addEventListener(Event.ENTER_FRAME, _draw);
removeEventListener(Event.ADDED_TO_STAGE, init);
}

function _draw(evt:Event):void {

       // comandos aqui
       // calculo para x
       // calculo para y

       if (x > 500) { 

               _clean();
       }
}

function _clean():void {

       //outros comandos

       stage.removeEventListener(Event.ENTER_FRAME, _draw);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui!

 

Descobri no FlashandMath, que o método unload não consegue remover event listeners adicionados ao stage. No entanto, existe outro métodos que é semelhante mas mais imcrementado: unloadAndStop(). Esse métodos para todos os listeners adicionados no palco e outras coisas, como sons.

 

Então a minha função, que remove o swf, eu deixei assim:

function removeSWF():void {

container.removeChildAt(0);

mLoader.unloadAndStop();
}

 

Obrigado pela ajuda.

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.