Ir para conteúdo

POWERED BY:

Arquivado

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

Andre Summers

Classe para Exibir SWFs Externos

Recommended Posts

Olá, pessoal. Estou tentando construir uma classe para exibir um SWF externo dentro de meu filme principal. O código que eu consegui montar até agora não retorna nenhum erro, mas também não mostra o SWF no palco. Será que podem me ajudar :mellow:

 

Segue o Código:

 

package layout {
	
	//Importando funções usadas normalmente no FLA
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.text.*;

	public class SWFExterno extends Sprite {
		
		public function SWFExterno(url_recebida:String) {
			
			var requisicao:URLRequest = new URLRequest(url_recebida);
			var loader:Loader = new Loader();
			configureListeners(loader.contentLoaderInfo);
			
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, mostraProgresso);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, mostraCompleto);
			
			loader.load(requisicao);
			
		}
		
		private function mostraProgresso(event:ProgressEvent):void {
			
			var percentualCarregado:Number = event.bytesLoaded/event.bytesTotal;
			percentualCarregado = Math.round(percentualCarregado * 100);
			
			//Mostrando a porcentagem carregada	
			var percent_carregado:TextField = new TextField();
			percent_carregado.text = "Carregando: " + percentualCarregado + "%";  
			percent_carregado.alpha = 1;
			percent_carregado.x = 25;  
			percent_carregado.y = 525;
			
			trace("Carregando: " + percentualCarregado + "%");
			this.addChild(percent_carregado);
			
		}
		
		private function mostraCompleto(event:Event):void {
			
			event.currentTarget.removeEventListener(Event.COMPLETE, mostraProgresso);
                        this.addChild(event.currentTarget.content);
			trace("Completo");
			
		}
		
		private function removerSWF(event:Event):void {
		   
		}
		
		private function configureListeners(dispatcher:IEventDispatcher):void {

                       dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                       dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
                       dispatcher.addEventListener(Event.INIT, initHandler);
                       dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                       dispatcher.addEventListener(Event.OPEN, openHandler);
                       dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                       dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);

                }
		
		private function completeHandler(event:Event):void {
                       trace("completeHandler: " + event);
                }

                private function httpStatusHandler(event:HTTPStatusEvent):void {
                       trace("httpStatusHandler: " + event);
                }

                private function initHandler(event:Event):void {
                       trace("initHandler: " + event);
                }

                private function ioErrorHandler(event:IOErrorEvent):void {
                       trace("ioErrorHandler: " + event);
                }

                private function openHandler(event:Event):void {
                       trace("openHandler: " + event);
                }

                private function progressHandler(event:ProgressEvent):void {
                       trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
                }

                private function unLoadHandler(event:Event):void {
                       trace("unLoadHandler: " + event);
                }
		
	}//Fecha Class
	
}//Fecha Package

Agradeço desde já quem puder ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo complicações assim, de uma maneira bem simples:

 

package {
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.net.URLRequest;
	import flash.display.Stage;

	public class SwfExterno {

		public var l:Loader = new Loader();
		public var url:URLRequest;
		public var s:Stage;

		public function SwfExterno(stg:Stage) {

			this.s=stg;


		}

		public function carregaSWF(str:String):void {

			url=new URLRequest(str);
			l.load(url);
			s.addChild(l);

		}




	}




}

 

Dai no fla, voce so precisa instanciar um objeto dessa classe e chamar o metodo carregaSWF, passando o swf que você quer carregar. Depois é so implementar as outras funcoes de preloader,complete etc..

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Efetuei um teste seguindo seu exemplo... mas obtive o seguinte erro:

 

1067: Implicit coercion of a value of type index:Main Timeline to an unrelated type flash.display:Stage

 

Pode me ajudar a resolver?

 

SWFExterno.as

package carregador {
	
	//Efetuando importações necessárias
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.text.*;

	public class SWFExterno extends Sprite {
		
		public var loader:Loader = new Loader();
                public var requisicao:URLRequest;
                public var palco:Stage;
		
		public function SWFExterno(stg:Stage) {
			
        	    this.palco = stg;

                }

                public function carregaSWF(url_recebida:String):void {

        	    requisicao = new URLRequest(url_recebida);

                    loader.contentLoaderInfo.addEventListener(Event.OPEN, verificaAbertura);
		    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, mostraProgresso);
		    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, verificaIOError);
		    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, mostraCompleto);

        	    loader.load(requisicao);

                }

                private function mostraProgresso(event:ProgressEvent):void {
			
			var percentualCarregado:Number = event.bytesLoaded/event.bytesTotal;
			percentualCarregado = Math.round(percentualCarregado * 100);
			
			//Mostrando a porcentagem carregada	
			var percent_carregado:TextField = new TextField();
			percent_carregado.alpha = 1;
			percent_carregado.textColor = 0xFF0000;
			percent_carregado.border = true;
			percent_carregado.x = 1;  
			percent_carregado.y = 1;
			
			addChild(percent_carregado);
			percent_carregado.text = "Carregando: " + percentualCarregado + "%";
			
			trace("Carregando: " + percentualCarregado + "%");
			
		}
		
		private function mostraCompleto(event:Event):void {
			
			event.currentTarget.removeEventListener(Event.COMPLETE, mostraProgresso);
                        palco.addChild(loader);
			trace("Completo");
			
		}
		
		private function verificaAbertura(event:Event):void {
			
      		        trace("Aberto com sucesso!");
			
    	        }
		
		private function verificaIOError(event:IOErrorEvent):void {
			 
                        trace("Encontrado o seguinte ioError: " + event);
			
                }

        }

}

index.fla

import carregador.SWFExterno;
var fundo:SWFExterno = new SWFExterno();
fundo.carregaSWF('layout/background1.swf');

Compartilhar este post


Link para o post
Compartilhar em outros sites

uns detalhes

 

no construtor da sua classe, você pede o parâmetro "stg:Stage", então faltou passar

 

 

import carregador.SWFExterno;
var fundo:SWFExterno = new SWFExterno(this.stage);
fundo.carregaSWF('layout/background1.swf');

 

 

outra coisa, não precisa dar um "extends Sprite" nela, já que o proposito não é adiciona-la na tela, e sim apenas carregar

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

uns detalhes

 

no construtor da sua classe, você pede o parâmetro "stg:Stage", então faltou passar

 

 

import carregador.SWFExterno;
var fundo:SWFExterno = new SWFExterno(this.stage);
fundo.carregaSWF('layout/background1.swf');

 

 

outra coisa, não precisa dar um "extends Sprite" nela, já que o proposito não é adiciona-la na tela, e sim apenas carregar

 

 

[]´s

 

Na verdade, ele deve fazer uma coisa ou outra. Ou usa esse parâmetro passando um DisplayObjetoContainer (no caso, passando o stage), ou extende Sprite e adiciona o carregador no palco com addChild(). Minha opnião é de que a classe como postada inicialmente é mais flexível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verdade brunobispo, no primeiro caso esta melhor, eu só manteria o método "carregaSWF",(ou só "carregar" )

 

para iniciar o carregamento, e não dentro do construtor, e depois dê um addChild

 

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Efetuei um teste seguindo seu exemplo... mas obtive o seguinte erro:

 

1067: Implicit coercion of a value of type index:Main Timeline to an unrelated type flash.display:Stage

 

Pode me ajudar a resolver?

 

SWFExterno.as

package carregador {
	
	//Efetuando importações necessárias
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.text.*;

	public class SWFExterno extends Sprite {
		
		public var loader:Loader = new Loader();
                public var requisicao:URLRequest;
                public var palco:Stage;
		
		public function SWFExterno(stg:Stage) {
			
        	    this.palco = stg;

                }

                public function carregaSWF(url_recebida:String):void {

        	    requisicao = new URLRequest(url_recebida);

                    loader.contentLoaderInfo.addEventListener(Event.OPEN, verificaAbertura);
		    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, mostraProgresso);
		    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, verificaIOError);
		    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, mostraCompleto);

        	    loader.load(requisicao);

                }

                private function mostraProgresso(event:ProgressEvent):void {
			
			var percentualCarregado:Number = event.bytesLoaded/event.bytesTotal;
			percentualCarregado = Math.round(percentualCarregado * 100);
			
			//Mostrando a porcentagem carregada	
			var percent_carregado:TextField = new TextField();
			percent_carregado.alpha = 1;
			percent_carregado.textColor = 0xFF0000;
			percent_carregado.border = true;
			percent_carregado.x = 1;  
			percent_carregado.y = 1;
			
			addChild(percent_carregado);
			percent_carregado.text = "Carregando: " + percentualCarregado + "%";
			
			trace("Carregando: " + percentualCarregado + "%");
			
		}
		
		private function mostraCompleto(event:Event):void {
			
			event.currentTarget.removeEventListener(Event.COMPLETE, mostraProgresso);
                        palco.addChild(loader);
			trace("Completo");
			
		}
		
		private function verificaAbertura(event:Event):void {
			
      		        trace("Aberto com sucesso!");
			
    	        }
		
		private function verificaIOError(event:IOErrorEvent):void {
			 
                        trace("Encontrado o seguinte ioError: " + event);
			
                }

        }

}

index.fla

import carregador.SWFExterno;
var fundo:SWFExterno = new SWFExterno();
fundo.carregaSWF('layout/background1.swf');

 

Você não leu direito o post que eu fiz, mas os colegas ai acima deram a deixa para você.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui carregar os SWFs com a classe...

 

Mas como faria para removê-los... teria como criar uma função para isso na classe?

 

E tem como criar uma função para controlar quem fica por cima de quem no carregamento de vários SWFs... ?

 

Segue o código até agora...

 

SWFExterno.as

package carregador {
	
	//Efetuando importações necessárias
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.text.*;

	public class SWFExterno extends Sprite {
		
	public var loader:Loader = new Loader();
        public var requisicao:URLRequest;
        public var palco:Stage;
		
	public function SWFExterno(stg:Stage) {
			
        	this.palco = stg;

        }

        public function carregaSWF(url_recebida:String):void {

        	requisicao = new URLRequest(url_recebida);
			
		loader.contentLoaderInfo.addEventListener(Event.OPEN, verificaAbertura);
		loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, mostraProgresso);
		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, verificaIOError);
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, mostraCompleto);
			
        	loader.load(requisicao);

        }
		
	private function mostraProgresso(event:ProgressEvent):void {
			
		var percentualCarregado:Number = event.bytesLoaded/event.bytesTotal;
		percentualCarregado = Math.round(percentualCarregado * 100);
			
		trace("Carregando: " + percentualCarregado + "%");
			
	}
		
	private function mostraCompleto(event:Event):void {
			
		event.currentTarget.removeEventListener(Event.COMPLETE, mostraProgresso);
		palco.addChild(event.currentTarget.content);
			
		trace("Carregamento de arquivo completo");
			
	}
		
	private function verificaAbertura(event:Event):void {
			
      		trace("Arquivo encontrado / aberto com sucesso!");
			
    	}
		
	private function verificaIOError(event:IOErrorEvent):void {
			 
                trace("Encontrado o seguinte ioError: " + event);
			
        }
		
	}//Fecha Class
	
}//Fecha Package

index.fla

import carregador.SWFExterno;
var fundo:SWFExterno = new SWFExterno(this.stage);
fundo.carregaSWF('layout/background1.swf');

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.