Comunidad de diseño web y desarrollo en internet online

AS3 y Circular Thumbnail Gallery

Citar            
MensajeEscrito el 11 Feb 2009 01:39 pm
Buenas a todos,

Recientemente me metí de lleno en AS3 y después de varios problemas, los he podido subsanar todos menos uno. En una de las webs corporativas que estoy haciendo he utilizado un script de flasmo "Circular thumbnail gallery" aquí pongo la dirección por si a alguien le interesa: http://www.flashmo.com/preview/flashmo_129_circle

El tema es que en la web tiene la típica estructura de botones y que cada botón vaya a un gotoAndStop dentro del timeline y cuando voy al de la galería circular, este me carga todo la galería sin problemas, pero cuando le doy a otro botón se carga esta nueva parte, pero lo que es el circulo con todas las fotos se mantiene, sabéis como puedo hacer para que cuando vaya a otro punto del timeline este circulo desaparezca ??

Pongo un poco el código del circulo a ver si me podeis ayudar:

Código :

import fl.transitions.Tween;
import fl.transitions.easing.*;

var filename_list = new Array();
//var url_list = new Array();
var url_target_list:Array = new Array();
var title_list = new Array();
var description_list = new Array();
var description2_list = new Array();

var i:Number;
var tn:Number = 0;
var scale_factor:Number = 0.6;
var tween_duration:Number = 0.8;

var angle:Number;
var degree:Number
var total:Number;
var llista_xml:XML = new XML();
var folder:String = "fotos/";
var xml_loader:URLLoader = new URLLoader();
xml_loader.load(new URLRequest("llista.xml"));
xml_loader.addEventListener(Event.COMPLETE, create_thumbnail);

var thumbnail_group:MovieClip = new MovieClip();
stage.addChild(thumbnail_group);

thumbnail_group.x = tn_group.x;
var default_y:Number = thumbnail_group.y = tn_group.y;

tn_group.visible = false;
fm_previous.visible = false;
fm_next.visible = false;

tn_title.text = "";
tn_desc.text = "";
tn_desc2.text = "";
//tn_url.text = "";

function create_thumbnail(e:Event):void 
{
   llista_xml = XML(e.target.data);
   total = llista_xml.thumbnail.length();
   angle = Math.PI * 2/ total;
   degree = Math.round( angle * 180 / Math.PI );

   for( i = 0; i < total; i++ )
   {
      filename_list.push( llista_xml.thumbnail[i][email protected]() );
      //url_list.push( llista_xml.thumbnail[i][email protected]() );
      //url_target_list.push( llista_xml.thumbnail[i][email protected]() );
      title_list.push( llista_xml.thumbnail[i][email protected]() );
      description_list.push( llista_xml.thumbnail[i][email protected]() );
      description2_list.push( llista_xml.thumbnail[i][email protected]() );
   }
   load_tn();
}

function load_tn():void
{
   var pic_request:URLRequest = new URLRequest( folder + filename_list[tn] );
   var pic_loader:Loader = new Loader();

   pic_loader.load(pic_request);
   pic_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, on_loaded);
   tn++;
}

function on_loaded(e:Event):void
{
   if( tn < total )
   {
      load_tn();
   }
   else
   {
      fm_previous.visible = true;
      fm_next.visible = true;
      fm_previous.addEventListener( MouseEvent.CLICK, to_previous );
      fm_next.addEventListener( MouseEvent.CLICK, to_next );
      stage.addEventListener(MouseEvent.MOUSE_WHEEL, on_wheel );
   }

   var flashmo_bm:Bitmap = new Bitmap();
   var flashmo_mc:MovieClip = new MovieClip();

   flashmo_bm = Bitmap(e.target.content);
   flashmo_bm.x = - flashmo_bm.width * 0.5;
   flashmo_bm.y = - flashmo_bm.height * 0.5;
   flashmo_bm.smoothing = true;
   
   var bg_width = flashmo_bm.width + 10;
   var bg_height = flashmo_bm.height + 10;
   
   flashmo_mc.addChild(flashmo_bm);
   flashmo_mc.graphics.beginFill(0x666666);
   flashmo_mc.graphics.drawRect( - bg_width * 0.51, - bg_height * 0.51, bg_width * 1.02, bg_height * 1.02 );
   flashmo_mc.graphics.beginFill(0xFFFFFF);
   flashmo_mc.graphics.drawRect( - bg_width * 0.5, - bg_height * 0.5, bg_width, bg_height );
   flashmo_mc.graphics.endFill();
   
   flashmo_mc.name = "flashmo_" + thumbnail_group.numChildren;
   flashmo_mc.buttonMode = true;
   flashmo_mc.addEventListener( MouseEvent.MOUSE_OVER, tn_over );
   flashmo_mc.addEventListener( MouseEvent.MOUSE_OUT, tn_out );
   flashmo_mc.addEventListener( MouseEvent.CLICK, tn_click );
   flashmo_mc.scaleX = flashmo_mc.scaleY = scale_factor;

   flashmo_mc.x = Math.cos(thumbnail_group.numChildren * angle) * 150;
   flashmo_mc.y = Math.sin(thumbnail_group.numChildren * angle) * 150;
   flashmo_mc.rotation = thumbnail_group.numChildren * degree;

   thumbnail_group.addChild(flashmo_mc);
}


muchas gracias por vuestro tiempo.

Por alexvs

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Feb 2009 03:36 pm
Hola!! no te sirve un:

Código ActionScript :

thumbnail_group.visible=false;  
                             //O
                             stage.removeChild(thumbnail_group);
 

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2009 03:43 pm
TODO lo que añadamos a la displayList se va a ver hasta que no lo eliminemos de ella
Así que, bastaría que lo quitaras de la displayList

Código ActionScript :

removeChild(thumbail_group)

Esta instrucción sólo quita tu thumbail_group de la displayList, pero no desaparecen de la memoria ni el thumbail_group, ni los "flashmo_mc" que tiene dentro ni los eventos sobre esos "flashmo_mc", ni cada uno de los "flashmo_bm" que contienen.

Así que estos objetos siguen estando ahí y ocupando memoria y recursos.
¿ventaja?, que con sólo hacer un

Código ActionScript :

addChild(thumbail_group)

ya verías de nuevo tus thumbails
¿desventajas? el que siga ocupando memoria. Si no quieres que lo haga deberás eliminar todo los que haya dentro (y, cada vez que quieras ver tus thumbails hacer el

Código ActionScript :

xml_loader.load(new URLRequest("llista.xml"));

que desencadena todo.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2009 04:16 pm
Sois increíbles muchas gracias. Ahora me surge otro problema ( muy chorra seguro).

Tengo 4 botones cada uno me va al gotoAndStop 1, al 51, al 101 y al 151. El botón 3 es el donde carga la galería.

Entonces todo funciona con el stage.removeChild(thumbnail_group) si antes ha cargado la galería, pero si navego con algun botón sin cargar la galería me da un error ya que el parámetro child es null, que tipo de if tengo que hacer para que me haga un stage.removeChild en caso de que haya cargado la galeria addChild(thumbnail_group) o que no haga nada en caso de que no esté cargado.

Otra vez mil gracias ( ya no molesto más )

Por alexvs

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Feb 2009 04:38 pm
Me respondo a mi mismo que ya lo he solucionado, he creado una simple variable que si es 0 no haga nada y si es 1 me haga el removeChild , ya que esta variable por defecto está a 0 y sólo cambia a 1 si hace el stage.addChild(thumbnail_group) ...

Gracias.

Por alexvs

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Feb 2009 05:18 pm

alexvs escribió:

si navego con algun botón sin cargar la galería me da un error ya que el parámetro child es null, que tipo de if tengo que hacer para que me haga un stage.removeChild

Creo que no te hace falta una variable, sólo comprobar si la propiedad stage no es null (pero debería comprobarlo)

Código ActionScript :

if (thumbnail_gruop.stage!=null){  //si es distinto de null
      removeChild(thumbail_group);
}

Por Eliseo2

710 de clabLevel



 

firefox

 

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