Cargar swf desde XML
3 seguidores
Hola a todos.
Tengo una duda. Quiero cargar 5 swf desde un archivo XML. Como cuando se realiza una galería de imagenes pero en vez de imagenes que sean peliculas. Alguien sabe como puedo hacerlo?
Muchas gracias!
dagi3d
Pues cargas el xml, lo parseas para obtener el nombre del swf y luego lo cargas con la clase Loader: http://www.iheartactionscript.com/loading-an-external-swf-in-as3/
David López
Gracias dagi3d pero creo que no me he explicado bien.
He creado una galería de imagenes en la cual las fotos son cargadas a través de un XML. El problema está en que yo quiero sustituir esas fotos(jpg) por archivos swf. Al hacerlo no se me reproduce la película.
¿Qué puedo hacer? Alguien me puede echar un cable?
la estructura del XML es la siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<galeria>
<config>
<width>582</width>
<height>359</height>
</config>
<imagen>images/imagen_1.jpg</imagen>
<imagen>images/imagen_2.jpg</imagen>
<imagen>images/imagen_3.jpg</imagen>
<imagen>images/imagen_4.jpg</imagen>
</galeria>
y lo sustituyo por este código:
<?xml version="1.0" encoding="UTF-8"?>
<galeria>
<config>
<width>582</width>
<height>359</height>
</config>
<imagen>images/pelicula_1.swf</imagen>
<imagen>images/pelicula_1.swf</imagen>
<imagen>images/pelicula_1.swf</imagen>
<imagen>images/pelicula_1.swf</imagen>
</galeria>
Pero no me reproduce nada! ¿Alguien ve dónde está el error?
Gracias anticipadas
dagi3d
lo interesante sería que pegaras el código con el que estás cargando los swfs, ya que acabo de comprobar que si cargas una película de manera externa sí que reproduce la animación. puedes probar a llamar al método play o gotoAndPlay del movieclip cargado por si acaso, pero en teoría no le debería hacer falta...
David López
Hola, adjunto el código con el que estoy cargando los swf. Espero que podais echarme una mano, estoy bastante perdido. Gracias dagi3d por el interés.
package {
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import jel.com.display.Layout;
import jel.com.ui.Galeria;
public class principal extends Layout
{
public function principal()
{
super(582, 359);
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest(getUrl("xml2/trabajo.xml")));
loader.dataFormat = URLLoaderDataFormat.TEXT
loader.addEventListener(Event.COMPLETE, onCompleteXml);
}
private function onCompleteXml(evt:Event):void {
var _xml:XML = new XML(evt.target.data);
//trace(_xml);
var _w:Number = _xml.config.width;
var _h:Number = _xml.config.height;
var galeria:Galeria = new Galeria(_w, _h, 0.75, "easeInOutQuad", _xml);
galeria.x = 0.5*(this._width - _w);
galeria.y = 0.5*(this._height - _h);
addChild(galeria);
}
private function getUrl(url:String):String {
if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0)) {
var rootURL:String;
if (root) {
rootURL = root.loaderInfo.url;
if (rootURL) {
var lastIndex: int= Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
if (lastIndex != -1) {
url = rootURL.substr(0, lastIndex + 1) + url;
}
}
}
}
return url;
}
}
}
David López
Up! alguna ayuda?
Sergi_delatorre
YO estoy intentando hacer lo mismo, se me ocurre cargarlo en otra escena... ¿es posible?
dagi3d
Buenas,
he subido un ejemplo sencillito y simplificando la carga para que veas que sí que debería funcionar: http://app.dagi3d.net/loadSwf.zip
De todas maneras también te recomiendo que asignes la función al evento complete *antes* de llamar al método load ya que podría darse el caso de que el fichero cargara antes y por lo tanto no se llamaría a la función:
loader.addEventListener(Event.COMPLETE, onCompleteXml);
loader.load(new URLRequest(getUrl("xml2/trabajo.xml")));