Comunidad de diseño web y desarrollo en internet online

Acceder a libreria/escenario de un swf externo desde FLEX

Citar            
MensajeEscrito el 04 Feb 2010 12:14 pm
Hola.

Estoy dando mil vueltas por el foro y google y no encuentro la manera.

Necesito cargar un swf externo en FLEX y después usar los MovieClips que estan en libreria (o en escenario si fuera necesario) como objetos de FLEX. Poder colocar donde quiero y hacer cosas con estos MovieClips.

Lo que he encontrado es :

Código Flex :

private var _swf:MovieClip;
private function loadSwfSkin():void{
   
   var loader:Loader = new Loader();
   var request:URLRequest = new URLRequest("swf/skin.swf");
   loader.load(request);
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, skinCargado);
}
private function skinCargado(e:Event):void{
   _swf = e.target.content as MovieClip;
   var clip:MovieClip = _swf.getChildByName("bot1") as MovieClip;
   trace(clip.toString())  // "bot1" se llama un MC cual q este en escenario y  en libreria se llama "Bot1" lo mismo como su clase , devuelva: [object Bot1] asi se llama 
   bot1.addChild(clip);
}



y luego en la Consola me sale error

Código Flex :

TypeError: Error #1034: Error de conversión forzada: no se puede convertir Bot1@20d54f71 en mx.core.IUIComponent.
   at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\Container.as:3302]
   at mx.core::Container/addChildAt()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\Container.as:2250]
at mx.core::Container/addChild()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\core\Container.as:2183]
at playFlex/skinCargado()[/Applications/XAMPP/xamppfiles/htdocs/Playspace/app/playFlex/src/as/srcINIT.as:32]




la linia 32 es bot1.addChild(clip);

Todos ejemplos que he visto están para AS3 , pero en FLEX me dan error... igual hago algo mal?

Gracias por cualquier ayuda.... que estoy dando vueltas y no veo la salida ;)

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Feb 2010 12:30 pm
Tienes que poner el Loader dentro de algún componente de Flex (por ejemplo un Canvas), para que así forma parte del DisplayList y puedas aceder al elemento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 12:40 pm
Gracias Jorge, pero como se hacen, si no es mucho pedir ?

Código Flex :

bot1Canvas.addChild(loader);
var loader:Loader = new Loader();
skinCanvas.addChild(loader);


asi me da error. ;(

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Feb 2010 12:45 pm
Lo estás agregando dos veces a distintos canvas ....¿Cual es el error?
Otra opción: usa un swfLoader, luego también tiene la propiedad content

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 12:59 pm
Usando SWFLoader y luego si intento usar elemento del escenario del swf cargado

Código Flex :

var bot1:MovieClip = e.currentTarget.content.bot1 as MovieClip;
trace(bot1.toString()) // [object Bot1]
bot1Canvas.addChild(bot1);

TypeError: Error #1034: Error de conversión forzada: no se puede convertir Bot1@24859ee1 en mx.core.IUIComponent.



y si meto dentro de un Canvas

Código Flex :

private function loadSwfSkin():void{
   
   var loader:Loader = new Loader();
   bot1Canvas.addChild(loader);
   var request:URLRequest = new URLRequest("swf/skin.swf");
   loader.load(request);
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, skinCargado);
}
private function skinCargado(e:Event):void{
   _swf = e.target.content as MovieClip;
   var clip:MovieClip = _swf.getChildByName("bot1") as MovieClip;
   trace(clip.toString())
   bot1Canvas.addChild(clip);
   
}
################  ERROR #########
TypeError: Error #1034: Error de conversión forzada: no se puede convertir flash.display::Loader@2889b871 en mx.core.IUIComponent.


tendría haver una salida..estoy segurísimo perrro... no lo se donde... BUFFFF ;)

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Feb 2010 01:39 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 01:49 pm
No es exactamente que necesito.

he probado crear un swc, y no consigo poder usar un elemento de libreria para attachar dentro de un canvas de FLEX.


En todos modos mil gracias por intento. Muy raro pro que en un proyecto AS eso sin problemas pero en FLEX me da error... o es un bug o yo q se

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Feb 2010 01:58 pm
¿Usaste un SWFLoader?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 02:03 pm
Si....

Código Flex :

var bot1:MovieClip = e.currentTarget.content.bot1 as MovieClip; 
trace(bot1.toString()) // [object Bot1] 
bot1Canvas.addChild(bot1); 
 
TypeError: Error #1034: Error de conversión forzada: no se puede convertir Bot1@24859ee1 en mx.core.IUIComponent.



bot1 es un elemento en escenario.... y no me deja luego coger y attachar dentro de un componente FLEX... por la menos a mi no funciona

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 04 Feb 2010 02:29 pm
La idea es que pongas un swfLoader dentro de un canvas
Luego seleccionas el SWFLoader y donde dices source lo pones el path a tu swf, marcas el autoload en true
Cuando cargues tu aplicación, te refieres a tu elemento de esta forma:

miSWFLoader.content.tuclip

No tengo el Flex a mano para chequearlo ahora, pero recuerdo haber hecho la botonera entera con Flash de un player en Flex

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2010 03:15 pm
YUPI!!!!
Tenias la mitad de razón!!!! :)

si que se puede hacer con un SWFLoader... y luego colocar por "x" y "y" donde quieras... pero siempre estará en mismo nivel/profundidad de tu pelicula.

Explico.... mi idea es crear un swf de skin y después de cargar distribuir por todos niveles necesarios del FLEX.... aqui donde tenia problemas.... cuando intentaba hacer unCanvas.addChild(miSwf.mc) me daba error... la salida es fazil.. pero me ha costado llegar ;)

Código Flex :

skinLoader.load("swf/skin.swf");
skinLoader.addEventListener(Event.INIT,swfCargado);
private function swfCargado(e:Event):void{
   
   var skin:MovieClip = e.currentTarget.content as MovieClip;
   
   // SI NO HACE FALTA CAMBIAR PROFUNDIDA Y SOLO MOVER POR X y/o Y
   var botton2:MovieClip = skin.botton2 as MovieClip;
   botton2.x = 25;
   botton2.y = 75;
   


   var botton1:MovieClip = skin.botton1 as MovieClip;

   // PERO SI HAY QUE PONER DENTRO DE UN COMPONENTE DE FLEX  hay q añadir eso  "footer" es un componente tipo CANVAS dentro de FLEX
   var ui:UIComponent = new UIComponent();   
   ui.addChild(botton1);
   footer.addChild(ui);

   botton1.stop();
   botton1.addEventListener(MouseEvent.MOUSE_OVER,function(evento:MouseEvent):void{
      evento.currentTarget.gotoAndStop(2);
   });
   
          
    botton1.addEventListener(MouseEvent.MOUSE_OUT,function(evento:MouseEvent):void{
   evento.currentTarget.gotoAndStop(1);
    });
   
   botton1.addEventListener(MouseEvent.CLICK,function(evento:MouseEvent):void{
    evento.currentTarget.gotoAndStop(1);
    });
   

}




Bufff.... ;)

Gracias Jorge!!!

Por hn4e7o

15 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.