Ir para conteúdo

POWERED BY:

Arquivado

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

marcos.cardoso

Definição de Classe via String

Recommended Posts

Bom dia.

 

Gerei um arquivo .swc com as imagens de alguns animais. Depois incorporei esse swc nas propriedades do meu projeto no flash de forma que pudesse instanciar cada animal de acordo com a string passada para uma outra classe definida como document class. Ok.

 

As strings dos tipos de animais são carregadas de um xml.

 

No entanto, quando tento instanciar um dos animais, o seguinte erro é gerado?

 

ReferenceError: Error #1065: A variável Vaca não foi definida.

at global/flash.utils::getDefinitionByName()

at classes::Main/createObjectFromString()

at classes::Main/adicionaAnimais()

at classes::Main/adicionaClasses()

at classes::Main/frame255()

 

Para exemplificar, postarei os códigos do xml e da classe que estou usando.

 

<?xml version="1.0" encoding="utf-8" ?>
<content>
<classe nome="anfibio">
	<animal nome="sapo" classe="Sapo"/>
	<animal nome="salamandra" classe="Salamandra"/>
	<animal nome="rã" classe="Ra"/>
</classe>
<classe nome="ave">
	<animal nome="coruja" classe="Coruja"/>
	<animal nome="flamingo" classe="Flamingo"/>
	<animal nome="galinha" classe="Galinha"/>
	<animal nome="garça" classe="Garca"/>
	<animal nome="pato" classe="Pato"/>
	<animal nome="pombo" classe="Pombo"/>
	<animal nome="tucano" classe="Tucano"/>
</classe>
<classe nome="mamifero">
	<animal nome="baleia" classe="Baleia"/>
	<animal nome="coelho" classe="Coelho"/>
	<animal nome="cachorro" classe="Cachorro"/>
	<animal nome="elefante" classe="Elefante"/>
	<animal nome="girafa" classe="Girafa"/>
	<animal nome="golfinho" classe="Golfinho"/>
	<animal nome="macaco" classe="Macaco"/>
	<animal nome="morcego" classe="Morcego"/>
	<animal nome="vaca" classe="Vaca"/>
</classe>
<classe nome="pez">
	<animal nome="sardinha" classe="Sardinha"/>
	<animal nome="tubarão" classe="Tubarao"/>
</classe>
<classe nome="réptil">
	<animal nome="cobra" classe="Cobra"/>
	<animal nome="jacaré" classe="Jacare"/>
	<animal nome="tartaruga" classe="Tartaruga"/>
</classe>
</content>

 

AS 3.0

 

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.getDefinitionByName;

public class Teste extends MovieClip {

	private var animais:Array;
	private var xml:XML;

	public function Teste() {

		super();

		animais = new Array();

		loadXML("xml/content.xml");	
	}

	private function loadXML(url:String):void {

		var request:URLRequest = new URLRequest(url);

		var loader:URLLoader = new URLLoader();
		loader.load(request);
		loader.addEventListener(Event.COMPLETE, carregado);
	}

	private function carregado(event:Event):void {

		xml = new XML(event.target.data);

		var i:uint, j:uint = 0;

		animais.pop();

		for (i = 0; i < xml.classe.length(); i++) {

			for (j = 0; j < xml.classe[i].animal.length(); j++) {

				animais.push(createObjectFromString(xml.classe[i].animal[j].@classe));
			}
		}

		trace(animais);
	}

	public function createObjectFromString(obj:String):MovieClip {

		var symbolName:String = obj;
		var symbolClass:Class = getDefinitionByName(symbolName) as Class;

		var _mc:MovieClip = new symbolClass();
		_mc.name = obj;

		return _mc;
	}
}	
}

 

Caso queiram testar, o código tá completo.

 

Agradeceria se alguém souber o porque desse erro. Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo visto é necessários criar uma classe que faz referência às classes do swc e depois chamar essa classe antes de chamar getDefinitionByName.

 

package src {

import flash.display.MovieClip;

public class AssestsExporter extends MovieClip {

	public function AssestsExporter() {

		super();
	}

	public static function export():void {

		Baleia;
		Cachorro;
		Cobra;
		Coelho;
		Coruja;
		Garca;
		Girafa;
		Golfinho;
	}
}	
}

 

como pode ser visto nesse link.

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.