Comunidad de diseño web y desarrollo en internet online

Restar indice a un array.

Citar            
MensajeEscrito el 23 Abr 2009 02:33 pm
Buenas, sigo con la galería de imágenes, esta vez me interesa guardar en una array la anchura de cada imagen para después poder posicionar cada imagen dependiendo del ancho de la anterior, sería así:

Código :

var anchos:Array = new Array();
....

//Creo las imagenes:

for (i = 0; i < 4; i++){
   crearImagenes(i);
}

function crearImagenes(num:Number){
    ...
    listener.onLoadInit = function(target_mc){
        anchos[num] = target_mc._width;
        //Y AHORA PARA SABER EL ANCHO DEL ANTERIOR
        trace(anchos[num - 1]);
        //ME DICE UNDEFINED
   };
}


No lo entiendo me debería decir "undefined" cuando sea anchos[-1], para el resto debería de mostrarmelo, supongo que será la sintaxis de ActionScript, espero que puedan ayudarme, saludos.

Por RM13

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Abr 2009 03:25 pm
Fallo de sintaxis no es, porque he probado con:

Código :

var i:Number;
var mi_array:Array = new Array();

mi_array[0] = "Cero";
mi_array[1] = "Uno";
mi_array[2] = "Dos";
mi_array[3] = "Tres";

for (i = 0; i < 4; i++){
   trace(mi_array[i-1]);
}


Me devuelve:
undefined
Cero
Uno

No entiendo :S
Dos

Por RM13

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Abr 2009 08:54 pm
intenta asi:

Código ActionScript :

function crearImagenes(num:Number){
    ...
    listener.num = num;
    listener.onLoadInit = function(target_mc){
        anchos[this.num] = target_mc._width;
        //Y AHORA PARA SABER EL ANCHO DEL ANTERIOR
        trace(anchos[this.num - 1]);
        //ME DICE UNDEFINED
   };
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 23 Abr 2009 08:55 pm
Sabes que seria mejor, que no crees un array, mejor guarda las propiedades del target en una variable:

Código ActionScript :

listener.onLoadInit = function(target_mc){ 
        target_mc._widthIni = target_mc._width;
}; 


asi cada clip tiene su anchura original en una variable llamada "_widthIni"

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 23 Abr 2009 10:16 pm

LongeVie escribió:

intenta asi:

Código ActionScript :

function crearImagenes(num:Number){
    ...
    listener.num = num;
    listener.onLoadInit = function(target_mc){
        anchos[this.num] = target_mc._width;
        //Y AHORA PARA SABER EL ANCHO DEL ANTERIOR
        trace(anchos[this.num - 1]);
        //ME DICE UNDEFINED
   };
}


Desgraciadamente sigue pasando lo mismo

Código :

trace(anchos[this.num])

Me devuelve bien la anchura de cada imagen

Código :

trace(anchos[this.num - 1])

Me devuelve undefined, no logro entenderlo.

En cambio:

Código :

listener.onLoadInit = function(target_mc){  
        target_mc._widthIni = target_mc._width; 
};  

Yo tampoco estoy muy de acuerdo en utilizar arrays para esto pero no veo otra manera, de la forma en que me has propuesto, ¿ Como podría hacer referencia al ancho de la imagen anterior ?, gracias por tu ayuda, un saludo.

Por RM13

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Abr 2009 04:07 am
ahh, bueno, el problema anterior te da undefined porque seiguramente trace(this.num - 1) devuelve numeros menores que cero, entonces no existen esos index.

de la segunda forma, mmm, no seria tan facil, postea completa tu funcion para ver si se puede hacer alguna otra cosa.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 24 Abr 2009 10:02 am
La función es la siguiente:

Código :

var posX:Number = 0;
var lienzo:MovieClip = this.createEmptyMovieClip("lienzo_grandes", this.getNextHighestDepth());

for(i = 0; i < 22; i++){
     crearGrandes(i);
}

function crearGrandes(num:Number){
      var fotoP:MovieClip = lienzo_grandes.createEmptyMovieClip("fotoP_" + num, l      ienzo_grandes.getNextHighestDepth());
      var linea:MovieClip = lienzo_grandes.createEmptyMovieClip("linea_" + num, lienzo_grandes.getNextHighestDepth());
      var contenedorP:MovieClip = fotoP.createEmptyMovieClip("contenedorP", 1);
      var mclP:MovieClipLoader = new MovieClipLoader();
      var listenerP:Object = new Object();
 
      mclP.addListener(listenerP);
      mclP.loadClip("imagenes/galeria/previas/" + i + ".jpg", contenedorP);

      listenerP.onLoadInit = function(target_mc:MovieClip) {
             //Aqui posiciono las imagenes, van a tener 2 anchuras posibles 270px o 480
            //Cuando carga la primera imagen (num = 0) la posiciono en _x = 0, _y = 0;
            if (num == 0){
                target_mc._x = 0;
                target_mc.y = 0;
            }else {
                if (anchos[num - 1] == 280){
                     target_mc._x = posX * 280;
                     target_mc._y = 0;
                }else {
                     target_mc._x = posX * 480
                     target_mc._y = 0;
                }
            }
            posX++;
      };
}

Lo que pretendo hacer es cargar todas las imagenes, con la misma altura (360px) y van a tener diferentes anchos (270px o 480px), y me interesa posicionarlas una seguida inmediatamente de la anterior, todas ellas dentro de una máscara, para al clickar en la siguiente imagen se mueva el lienzo y correr las fotos. Esa es mi idea, si saben una forma mejor (que seguro que la hay), soy todo oídos, gracias tu ayuda LongeVie

Por RM13

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Abr 2009 08:44 am
Mmm intenta asi:

Código ActionScript :

var posX:Number = 0;
var lienzo:MovieClip = this.createEmptyMovieClip("lienzo_grandes", this.getNextHighestDepth());
var cargador:MovieClipLoader = new MovieClipLoader();
cargador.addListener( this );

for(var i:Number = 0; i < 22; i++)
     crearGrandes(i);

function crearGrandes( num:Number ):Void
{
      var aux:MovieClip;
      aux = lienzo.createEmptyMovieClip("hijo" + num, num);
      aux.createEmptyMovieClip("fotoP", 0);
      aux.createEmptyMovieClip("linea", 1);
      aux.fotoP.index = num;
      aux = aux.fotoP.createEmptyMovieClip("_InnerClip", 0);
      cargador.loadClip( "imagenes/galeria/previas/" + i + ".jpg", aux);
}
//lienzo.hijoi.fotoP._innerClip == target_mc
function onLoadInit( target_mc:MovieClip )
{
      var anterior:MovieClip = target_mc._parent._parent._parent[ "hijo" + (target_mc._parent.index - 1) ];
      target_mc._x = anterior._x + anterior._width;
}


Me parece que asi debe funcionar.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 27 Abr 2009 10:43 am
Saludos LongeVie, muchísimas gracias por tu ayuda, finalmente he encontrado otra forma de hacerlo conservando un poco más mi código, es el siguiente:

Código :

      var anchos:Array = new Array();
      var counter:Number = 0;
      var MAX_LIMIT:Number = 3;

      crearGrandes(counter);

      function crearGrandes(num:Number) {
          var fotoP:MovieClip = lienzo_grandes.createEmptyMovieClip("fotoP_"+counter, lienzo_grandes.getNextHighestDepth());
          var contenedorP:MovieClip = fotoP.createEmptyMovieClip("contenedorP", 1);
          var mclP:MovieClipLoader = new MovieClipLoader();
          var listenerP:Object = new Object();

          mclP.addListener(listenerP);
          mclP.loadClip("grandes/"+counter+".jpg",contenedorP);
          listenerP.onLoadInit = function(target_mc:MovieClip) {
              anchos[counter] = target_mc._width;
              trace(anchos[counter - 1]);
              counter++;
              if(counter <= MAX_LIMIT) {
                  crearGrandes(counter);
              }
          };
      }


Te vuelvo a dar las gracias por tu ayuda, espero que este tema le sirva a alguien en un futuro , un saludo :D

Por RM13

13 de clabLevel



 

firefox

 

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