|
Hola gente...estoy migrando para AS3....en AS2 me resultaba mas facil de cargar un archivo SWF dentro de un contendor vacio....., veamos tengo en AS3 tres botones que cargan un swf distintos en un moviclip vacio....el cargar no tengo problema lo pude hacer ....pero no entiendo y no me sale el descargar....porque cada SWF q carga se sobrepone entre ellos lo que quiero hacer que cuando haga clik en un boton descargue los otros SWF....les pongo el codigo....y espero que me ayuden....gracias!!! Código : import flash.events.MouseEvent;
boton_btn.addEventListener(MouseEvent.MOUSE_UP, abrir);
btn2_btn.addEventListener(MouseEvent.MOUSE_UP, abrir1);
btn3_btn.addEventListener(MouseEvent.MOUSE_UP, abrir2);
//boton_btn.addEventListener(MouseEvent.MOUSE_UP, cerrar);
function abrir(e:Event):void {
var contenedor:MovieClip = new MovieClip();
var carga:Loader = new Loader();
carga.load(new URLRequest("carga.swf"));
carga.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);
function insertMovie(evt:Event):void {
addChild(contenedor).name="ubica";
ubica.addChild(carga).name="carga";
}
}
function abrir1(e:Event):void {
var contenedor:MovieClip = new MovieClip();
var carga1:Loader = new Loader();
carga1.load(new URLRequest("carga1.swf"));
carga1.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);
function insertMovie(evt:Event):void {
addChild(contenedor).name="ubica1";
ubica1.addChild(carga1).name="carga";
}
}
function abrir2(e:Event):void {
var contenedor:MovieClip = new MovieClip();
var carga:Loader = new Loader();
carga.load(new URLRequest("carga2.swf"));
carga.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);
function insertMovie(evt:Event):void {
addChild(contenedor).name="ubica";
ubica.addChild(carga).name="carga";
}
} |
|
|
puedes optimizar tu codigo , por ejemplo : tengo 3 botones con nombre de instancia loadSFWA,loadSFWB,loadSFWC. ahora creo un contenedor vacio que contendra los swfs cargados por el loader, para hacer mas dinamico el codigo los 3 botones tendran el mismo Listener , asi no tengo que hacer una funcion por cada boton, en la funcion que responde al click hare un switch para detectar que boton fue clickado, por consiguiente se modificara la url que le he de pasar al metodo load() del Loader.. ahora el codigo: Código :
//swfCon sera el contenedor
var swfCon:Sprite = new Sprite();
swfCon.x = swfCon.y = 80;
addChild (swfCon);
//esto ya no tiene mucha explicacion lo debes de saber
var swfRequest:URLRequest = new URLRequest();
var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
swfLoader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, onProgress);
//todos ejecutaran la funcion onClickLoadSWF
loadSWFA.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
loadSWFB.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
loadSWFC.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
function onClickLoadSWF (evt:MouseEvent):void
{
//detectamos que boton fue clickado , para ello nos auxiliamos de la propiedad name
switch (evt.currentTarget.name)
{
case "loadSWFA" :
swfRequest.url = "assets/swfA.swf";
break;
case "loadSWFB" :
swfRequest.url = "assets/swfB.swf";
break;
case "loadSWFC" :
swfRequest.url = "assets/swfC.swf";
break;
}
//seguido de la deteccion del boton , el request estara listo para ser pasado al metodo load()
swfLoader.load (swfRequest);
}
//cuando se complete la carga
function onComplete (evt:Event):void
{
//este if se ejecutara mientras el numero de hijos que contenga sea mayor de 0,
if(swfCon.numChildren)
{
//si es mayor de 0, es decir tiene algun swf , lo removeremos
swfCon.removeChildAt (0);
}
//agregamos el content del loader .. que es un displayObject .. SWF
swfCon.addChild (evt.target.content);
}
//podriamos agregar este otro evento , para obtener el porogreso de la carga, con el fin de hacer un preloader..
function onProgress (evt:ProgressEvent):void
{
var loadedBytes:Number = Math.ceil(evt.bytesLoaded / 1024);
var totalBytes:Number = Math.ceil(evt.bytesTotal / 1024);
var percent:int = (evt.bytesTotal / evt.bytesLoaded) * 100;
trace (loadedBytes + " of " + totalBytes + " KB Loaded " + percent + "% Complete");
}
eso es todo espero te sirva, saludo y feliz año nuevo. Jonathan |
|
|
Feliz 2010 !!!! gracias!!! |
|
|
jn_Flash escribió: puedes optimizar tu codigo , por ejemplo : tengo 3 botones con nombre de instancia loadSFWA,loadSFWB,loadSFWC. ahora creo un contenedor vacio que contendra los swfs cargados por el loader, para hacer mas dinamico el codigo
los 3 botones tendran el mismo Listener , asi no tengo que hacer una funcion por cada boton, en la funcion que responde al click hare un switch para detectar que boton fue clickado, por consiguiente se modificara la url que le he de pasar al metodo load() del Loader.. ahora el codigo: Código :
//swfCon sera el contenedor
var swfCon:Sprite = new Sprite();
swfCon.x = swfCon.y = 80;
addChild (swfCon);
//esto ya no tiene mucha explicacion lo debes de saber
var swfRequest:URLRequest = new URLRequest();
var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
swfLoader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, onProgress);
//todos ejecutaran la funcion onClickLoadSWF
loadSWFA.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
loadSWFB.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
loadSWFC.addEventListener (MouseEvent.CLICK, onClickLoadSWF);
function onClickLoadSWF (evt:MouseEvent):void
{
//detectamos que boton fue clickado , para ello nos auxiliamos de la propiedad name
switch (evt.currentTarget.name)
{
case "loadSWFA" :
swfRequest.url = "assets/swfA.swf";
break;
case "loadSWFB" :
swfRequest.url = "assets/swfB.swf";
break;
case "loadSWFC" :
swfRequest.url = "assets/swfC.swf";
break;
}
//seguido de la deteccion del boton , el request estara listo para ser pasado al metodo load()
swfLoader.load (swfRequest);
}
//cuando se complete la carga
function onComplete (evt:Event):void
{
//este if se ejecutara mientras el numero de hijos que contenga sea mayor de 0,
if(swfCon.numChildren)
{
//si es mayor de 0, es decir tiene algun swf , lo removeremos
swfCon.removeChildAt (0);
}
//agregamos el content del loader .. que es un displayObject .. SWF
swfCon.addChild (evt.target.content);
}
//podriamos agregar este otro evento , para obtener el porogreso de la carga, con el fin de hacer un preloader..
function onProgress (evt:ProgressEvent):void
{
var loadedBytes:Number = Math.ceil(evt.bytesLoaded / 1024);
var totalBytes:Number = Math.ceil(evt.bytesTotal / 1024);
var percent:int = (evt.bytesTotal / evt.bytesLoaded) * 100;
trace (loadedBytes + " of " + totalBytes + " KB Loaded " + percent + "% Complete");
}
eso es todo espero te sirva, saludo y feliz año nuevo. Jonathan Jonathan....lo prové.....y me sale el siguiente error: 1151: Existe un conflicto con la definición swfCon del espacio de nombres internal. var swfCon:Sprite = new Sprite(); ..... qué abra pasadoo???? |
|
|
si llevaste el codigo a una clase , por ejemplo el Document Class , en tu fla fijate que no tengas algun movieClip con ese nombre de instancia, otra cosa no se me ocurre. Jonathan |
|
|
Muy buenas, y gracias a todos por postear, resolver y compartir viestros conocimientos y desconocimientos par ael aporte de todos. Tengo una situacion similar, en la que cargo 3 swf, ya por mi cuenta he resuelto la ayuda de Jonathan, pero quiero un poco mas y queria saber si me podiais ayudar. La cosa que tengo hasta ahora es un menu con 3 opciones, que carga cada Seccion_swf en un contenedor_MC, al hacer click carga el correspondiente SWF. dato:Cada SWf tiene una transicion de entrada|stop|salida Quiero conseguir que al clickar otra opcion Mande el SwF de salida, lo elimine y después cargue el correspondiente SWF, en AS2 tenia una variable que me recogia que SWF se habia cargado y lo mandaba a salia, pero en AS3 me está costando. Muchas gracias por anticipado |
|