Muchas veces nos ha pasado de tener problema con las carpetas/rutas de los archivos, voy a explicarlo con el ejemplo.
Nuestro diseñador hace un bonito swf que llama a xml/mp3/flv que están dentro de una carpeta que se llama /cosas, por lo que gráficamente quedaría algo como esto:
El swf estaría aquí:

y en la carpeta cosas tendria algo como esto:

Cuando ejecutamos ese swf se ejecuta sin ningún problema. El diseñador nos pasa los archivos para los metamos en el sitio que ya estamos trabajando. Como ya estamos trabajando tenemos una estructura de trabajo y organización, con lo que tal vez quede algo así:

Lo mas común, es que pagina.html utilice el archivo flash.swf y aquí es cuando queremos matar gatitos.
¡EL FLASH NO FUNCIONA!
Pero si lo ejecutamos y anda ¿Por qué no anda cuando lo queremos usar? La mayoría de las veces, es la ruta de los archivos que levantamos.
Con el siguiente código podremos de manera muy fácil y elegante este problema:
Código :
function url():String
{
var url_array:Array = _root._url.split('/');
String(url_array.pop());
return url_array.join('/') + '/';
}
_root._global.myUrl = url();
La función en cuestión básicamente lo que hace es devolver el path del archivo swf, y es mas, le daremos el valor de la función a una variable global.
Con _global utilizamos variables globales, en este caso llamada myUrl, le daremos el valor que retorne nuestra función.
Nuestra función lo que hace es crear un array de la ruta completa pero separa por los / por lo que nuestro swf esta en www.dominio.com/carpeta/algo.swf el array tendrá los siguientes valores:
- 0 => www.dominio.com
- 1 => carpeta
- 2 => algo.swf
Con .pop() lo que hacemos es eliminar el ultimo elemento de ese array, y en la tercera línea se devuelve el resultado de unir ese array con el carácter / y le concatenamos / con lo que nos devolvería www.dominio.com/carpeta/
Ahora cada vez que tengamos cosas como:
Código :
myXML.load('miarchivo.xml');Lo reemplazaremos por
Código :
myXML.load(_root._global.myUrl + 'miarchivo.xml');
Y con eso, no importa donde se ejecute el swf, siempre llamara bien a todos los archivos.

*mira feo a "_global"
Código :
class Relative { static function loadMovie(r:MovieClip, o:Object, s:String) { var a:Array = r._root._url.split('/'); a.pop(); var u:String = a.join('/') + '/'; o.load(u + s); } }Código :
Zguillez :
Código :
class Relative { static function loadMovie(r:MovieClip, o:Object, s:String) { var a:Array = r._root._url.split('/'); a.pop(); var u:String = a.join('/') + '/'; o.load(u + s); } }Código :
Zguillez, interesante, no conocia las clases estaticas; de todas formas, la idea es conseguir la ruta del archivo, no que la funcion realice la tarea de .load()
Mas tarde vere la forma de implementarlo mejor utilizando clases estaticas
Gracias
Zguillez :
Código :
class Relative { static function loadMovie(r:MovieClip, o:Object, s:String) { var a:Array = r._root._url.split('/'); a.pop(); var u:String = a.join('/') + '/'; o.load(u + s); } }Código :
Sería:
Código :
class Relative { static function load(r:MovieClip, o:Object, s:String) { var a:Array = r._root._url.split('/'); a.pop(); var u:String = a.join('/') + '/'; o.load(u + s); } }Código :
Por Becky el 13 de Noviembre de 2009
Sería posible que la complementaran un poquito diciendo exactamente dónde hay que poner esos códigos para que todo salga a la perfección? Discúlpen, mis conocimientos de Flash son muy pocos y siempre guiada por ejemplos o tutoriales encontrados páginas como esta, así que se los agradecería un mundo.
Casualmente conseguí este post tratando de averiguar por qué una galería flash que subí al servidor no puede verse ni en el archivo de la página que estoy trabajando y mucho menos en el Myspace donde la quiero subir.
Este es el codigo que estoy utilizando an ambos casos:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" height="500" width="350">
<param name="allowScriptAccess" value="never" />
<param name="allowNetworking" value="internal" />
<param name="movie" value="http://www.mipagina.com.ve/prueba/miarchivo.swf"/>
<param name="wmode" value="transparent" />
<embed type="application/x-shockwave-flash" allowScriptAccess="never" allowNetworking="internal" src="http://www.mipagina.com.ve/prueba/miarchivo.swf" height="500" width="350" wmode="transparent" />
</object>
Con mi agradecimiento eterno si logran ayudarme a resolver el problema, les saluda,
Becky
Por naranjorange el 11 de Marzo de 2010
Por david el 19 de Mayo de 2010
Por apurado el 28 de Junio de 2011
Por nelson el 25 de Julio de 2011
Por nelson el 27 de Julio de 2011