Ir para conteúdo

POWERED BY:

Arquivado

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

michelmfreitas

Erro ao carregar arquivo

Recommended Posts

Olá pessoal,

 

estou programando uma aplicação em flash e quero fazer esta aplicação em POO, para aprendizado.

 

 

A ação que desejo no código é abrir um SWF externo. Utilizo um SWITCH para direcionar o arquivo correto, mas ele não reconhece o addChild. Por quê?

 

package {

	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.MouseEvent;
	import flash.display.SimpleButton;

	public class Click {
		
		
		public function Click(obj:SimpleButton) {
			
			obj.addEventListener(MouseEvent.CLICK, _click);
		
		}

		//seleciona o arquivo correspondente ao botao
		public function _click(e:MouseEvent):void {

			//trace(e.target.name);
			var loader:Loader = new Loader();
			
			switch (e.target.name) {
				case "bt_conteudo" :
					var arquivo:URLRequest = new URLRequest("conteudo.swf");
					loader.load(arquivo);
					break;

				case "bt_fotos" :
					var url:String = "fotos.swf";
					break;

				case "bt_videos" :
					break;

				case "bt_professores" :
					break;

				case "bt_patrocinadores" :
					break;
			}

                        loader.x = -100;

			loader.load(arquivo);
			addChild(loader);

		}

	}

}

Quando testo o filme ele acusa o erro: 1081: Call to a possibly undefined method addChild

 

Como resolvo isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua classe precisa estender uma classe que possua o método addChild (e que possa ser instanciada). Usa a Sprite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huuumm... entendi...

 

bom, consertei aqui e o erro sumiu, porém o SWF não carregou, ou carregou ao fundo, mas não consigo visualizar. Aparentemente está ok. O que pode estar acontecendo?

 

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está adicionando o seu objeto Click ao palco? Se não ele não aparece mesmo. Após instanciar o objeto Click (no fla), dá um addChild nele.

 

 

Só uma observação... como você falou que estava fazendo para aprendizado eu nem comentei, mas a lógica do 'click' ser um objeto me pareceu estranha. Tão estranha quanto você adicionar o 'click' agora ao palco. Além disso o método load está sendo chamado 2x quando o botão for o bt_conteudo. E vai dar erro quando clicar no bt_fotos.

 

Uma dica é você criar a variável url fora do switch, e dentro dele, de acordo com o botão você define o valor dela. E após fechar o switch, você cria o URLRequest com essa url, e chama o load

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como seria o click então? A maneira correta em POO?

Linguagem estruturada é mais tranquila. POO eu já estou tendo bastante dúvidas.

 

Voltando ao exemplo citado, meu codigo está chamando a Classe Click dessa maneira:

import Click;

var conteudo:Click = new Click(bt_conteudo);
var fotos:Click = new Click(bt_fotos);
var videos:Click = new Click(bt_videos);
var professores:Click = new Click(bt_professores);
var patrocinadores:Click = new Click(bt_patrocinadores);

Código AS:

package {

	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.MouseEvent;
	import flash.display.SimpleButton;
	import flash.display.Sprite;

	public class Click extends Sprite{
		
		
		public function Click(obj:SimpleButton) {
			
			obj.addEventListener(MouseEvent.CLICK, _click);
		
		}

		//seleciona o arquivo correspondente ao botao
		public function _click(e:MouseEvent):void {

			//trace(e.target.name);
			var loader:Loader = new Loader();
			var url:String;
			
			switch (e.target.name) {
				case "bt_conteudo" :
					url = "conteudo.swf";
					break;

				case "bt_fotos" :
					url = "fotos.swf";
					break;

				case "bt_videos" :
					url = "videos.swf";
					break;

				case "bt_professores" :
					url = "professores.swf";
					break;

				case "bt_patrocinadores" :
					url = "patrocinadores.swf";
					break;
			}
			
			var arquivo:URLRequest = new URLRequest(url);
			
			loader.x = 512;
			loader.y = 341.5;
			
			loader.load(arquivo);
			this.addChild(loader);

		}

	}

}

Tentei fazer como você exemplificou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria mais facil varios botoes apontando pra mesma funcão, e nela ter o switch.

 


  var url:URLRequest;


  switch(teste){

  case '1':
  url =  new URLRequest(string1);
  break;

  case '2':
  url =  new URLRequest(string2);
  break;
}
   
   loader.load(url);
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para aparecer você deveria adicionar cada objeto Click desse ao palco. Esse é um problema. Depois que resolver, vem o outro:

 

Como seria o click então? A maneira correta em POO?

 

não gosto de falar 'maneira correta' ou 'errada'... O que comentei foi o fato de você ter uma classe que vai gerenciar um evento (Click), e nessa mesma classe você está adicionando um objeto de exibição.

 

Acho que você poderia criar uma classe para os botões... e aos objetos dessa classe você adiciona toda a lógica do click, e na biblioteca você define seus botões como uma subclasse dessa classe criada...

 

além disso, poderia passar como parametro(ou com um setter) um objeto que servirá como container, e não adicionar no próprio objeto da classe...

 

mais parecido com o que você fez, seria criar uma classe para gerenciar (usando singleton, talvez) o evento de click nesses botões, e cadastrar os botões nessa classe...

 

enfim, existem muitas formas diferentes de fazer, a escolha da melhor depende do projeto e dos seus conhecimentos, e a resposta só vai vir com a experiência.

 

Como você disse que fez a classe para aprendizado, meu comentário foi só um toque.

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.