Jump to content


Photo

Problemas Na Comunicação De Uma Classe Com Outra


  • Faça o login para participar
2 replies to this topic

#1 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 29/03/2010, 16:16

Estou começando em AS3, e já esbarrei no primeiro problema.

Não consigo fazer a minha classe moduleButton se comunicar com a main.

Tenho um método público na classe moduleButton, e quero chamar ele na classe main (já dei import nesta classe), porém sempre que vou rodar o programa, no debugger aparece:

1180: Call to a possibly undefined method getInstance.


Mas o método existe, e é público!

Seguem os 2 AS

main
package classes
{
	
	import classes.moduleButton;
    import flash.display.MovieClip;
	import flash.display.Stage;
	import flash.display.StageScaleMode;
    import flash.display.StageDisplayState;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	public class main extends MovieClip
	{
		private var myLoader : URLLoader;
		private var myRequest : URLRequest;
		private var xmlData : XML;
		private var numberOfSlides : Number;		
		
		
		public function main()
		{
			stage.displayState = StageDisplayState.FULL_SCREEN;
			stage.scaleMode = StageScaleMode.EXACT_FIT;
			displayStage();
		}
		
		private function displayStage():void
		{
			if (getInstance())
			{
				trace("CLICOU");
			}
			else
			{
				trace("EM BRANCO");
			}
		}
		
		public function XMLLoad():void
		{
			myLoader = new URLLoader();
			myRequest = new URLRequest("xml/modules.xml"); 

			myLoader.load(myRequest);			
			myLoader.addEventListener(Event.COMPLETE, XMLLoaded);
		}
		
		public function XMLLoaded(event:Event):void
		{

			xmlData = new XML(event.target.data);	
	
			numberOfSlides = xmlData.module[getInstance()].*.length();
				
			for (var n : Number = 0;n < numberOfSlides; n++) //percorre todas laminas do respectivo modulo
			{
				trace("Lamina: " +  xmlData.module[getInstance()].slide[n].name);
			}
		}
	}
}



moduleButton
package classes
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	
	public class moduleButton extends MovieClip
	{
		private var _instance : *;
		
		public function moduleButton()
		{
			this.buttonMode = true;
			this.addEventListener(MouseEvent.ROLL_OVER,animIn);
			this.addEventListener(MouseEvent.ROLL_OUT,animOut);
			this.addEventListener(MouseEvent.CLICK,setInstance);
		}
		
		private function animIn(e:MouseEvent):void
		{
			this.alpha -= .3;
		}
		
		private function animOut(e:MouseEvent):void
		{
			this.alpha = 1;
		}
		
		private function setInstance(e:MouseEvent):void
		{
			_instance = e.target.name.toString();
			_instance = _instance.substr(6);	
			_instance = Number(_instance);
		}
		
		public function getInstance():Number
		{
			return _instance;
		}
	}
}

Alguma idéia do por que não conseguir chamar o método getInstance na classe main?

O que eu quero é receber a informação do que foi clicado (e essa informação eu recebo na classe moduleButton), e passar ela para o meu método XMLLoad -> XMLLoaded, que existe na classe main.

Ah, e a classe moduleButton é associada com meus botões que são movieClips (linkage).

A main é a classe principal do meu projeto.


obrigado (y)




Edição feita por: Nicholas Pufal, 29/03/2010, 16:23.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#2 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 29/03/2010, 17:59

Por convenção, uma classe sempre inicia com uma letra maiúscula, então o certo seria ModuleButton, tanto no nome do arquivo, quanto na declaração da classe e no método construtor. (y)

E para executar um método de outra classe, você precisa informa de onde vem este método, a menos que ele tenha sido herdado, mas como não é o caso, tente:

ModuleButton.getInstance()

Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#3 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 29/03/2010, 18:58

Valeu Paulo, mas não rolou...

Simplesmente nada acontece. E eu dou trace ModuleButton.getInstance() e não apareceu nada... Se dou trace nesse método, mas na classe onde ele de fato reside, retorna o número corretamente...

Não tenho a mínima idéia de como fazer essa ligação, passar um valor de uma classe para outra. Fiz outros testes e nada.

Alguma outra sugestão? (já mudei o nome das classes tb)

E quanto ao fórum, valeu por avisar.
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq