Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
Acredito que o problema deva ser com o SWC, pois quando coloco os animais na biblioteca do projeto funciona. Mas só com o SWC não funciona. Agora, não me pergunte porque ou como. Se você souber me diga.