Comunidad de diseño web y desarrollo en internet online

Recorrer todos los Elementos de Un Array y Ordenarlos con la Burbuja

Citar            
MensajeEscrito el 14 May 2014 04:33 am
Buenas noches a todos los usuarios de CristaLab soy nueva en este foro.
He creado un hilo para que por favor me ayuden con un codigo que estoy programando, yo antes programaba en c++(cosas muy basicas) y estoy migrando al maravilloso mundo de Flash/AS3.
Necesito recorrer todos los Elementos que se encuentren en un Array Bidimensional y luego ordenarlos con el metodo de la burbuja, se que existe el motodo .sort ley sobre este metodo o funcion pero quiero lograrlo como he aprendido en c++ que es el metodo de la burbuja.
Aqui un ejemplo espero que les sirve a muchos.
Esto es una Array de una sola Dimension ( Creo ) no estoy muy segura, pero eso fue lo que ley, este ejemplo he ordenado los elementos de un Array de forma Descendente o ascendente solo hay que cambiar el
">" o "<" en el if de la comparación:

Código C++ :

var aux:Number = 0;
var n:Array;
n = [10,4,1,5,8,3,7,0,8,2,9,6,11,0,0,-1,12,-2,-3,-4];
   trace("Original Array: " + n);
   trace("-----------------------------");
for (var i:Number = 0; i<n.length; i++)
{
   for (var j:Number = 0; j<n.length; j++)
   {
      if (n[j]>n[j+1])
      {
         aux = n[j];
         n[j] = n[j+1];
         n[j+1] = aux;
      }
   }

}
trace("-----------------------------");
trace("Array descendent: ");
for (var k:Number = 0; k<n.length; k++)

{
 trace(n[k]);   
}

for (var l:Number = 0; l<n.length; l++)
{
   for (var m:Number = 0; m<n.length; m++)
   {
      if (n[m]<n[m+1])
      {
         aux = n[m];
         n[m] = n[m+1];
         n[m+1] = aux;
      }
   }

}
trace("-----------------------------");
trace("Array ordered ascending: ");
for (var o:Number = 0; o<n.length; o++)

{
 trace(n[o]);   
}





ahora lo quiero lograr con un array de 2 dimensiones aqui este mi code este no lo he podido lograr no entiendo como hacerlo por eso pido ayuda a los expertos.

Código C++ :

var n:Array;
var aux:Number = 0;
// Array 
n = 
[[2,1,3,4],
 [5,8,6,7],
 [8,9,0,-1]];
 

 trace("          0 1 2 3");
 trace("        0[x,x,x,x]");
 trace("        1[x,x,x,x]");
 trace("        2[x,x,x,x]");
 
  trace("------------------------");
  trace("-----Original Array-----");

 for(var a:Number = 0; a<n.length; a++)
{
trace("         [" + n[a] + "]");

}
 trace("------------------------");
 trace("Size array: " + n.length);
 trace("------------------------");
 trace("Position of each element: ");
 trace("Position 0,0:" + " " + n[0][0]);
 trace("Position 0,1:" + " " + n[0][1]);
 trace("Position 0,2:" + " " + n[0][2]);
 trace("Position 0,3:" + " " + n[0][3]);
 trace("Position 1,0:" + " " + n[1][0]);
 trace("Position 1,1:" + " " + n[1][1]);
 trace("Position 1,2:" + " " + n[1][2]);
 trace("Position 1,3:" + " " + n[1][3]);
 trace("Position 2,0:" + " " + n[2][0]);
 trace("Position 2,1:" + " " + n[2][1]);
 trace("Position 2,2:" + " " + n[2][2]);
 trace("Position 2,3:" + " " + n[2][3]);
 trace("------------------------");
 trace(" ---Ordered array--- ");
 
 
for(var i:Number = 0; i<n.length; i++)
{
   for(var j:Number = 0; j<n.length; j++)
   {
      for(var k:Number = 0; k<n.length; k++)
      {
         for(var l:Number = 0; l<n.length; l++)
         {
            if(n[i][j]>n[k][l])
            {
               aux = n[i][j]; 
               n[i][j] = n[j][l]; 
               n[k][l] = aux;
            }
         }
      }
   }
}

for(var q:Number = 0; q<n.length; q++)
{
   for(var w:Number = 0; w<n.length; w++)
   {
      trace(n[q][w]);
   }
}


un chico en internet me dijo que usara 2 for y el el segundo for que colocara el inidice como muestro aqui:

Código C++ :

for(var i:Number = 0; i<n.length; i++)
{
   for(var j:Number = 0; j<n[i].length; j++)
   { 
      if (n[i][j]>n[i][j+1])
      {

         // Burbuja aqui
      }
   }
}


si se dan cuenta el 2do for tiene el array como indicie i "n[i].length"
no entiendo porque me planteo eso no logro de entender, en fin
necesito ayuda con este array por favor ayúdenme a solucionar este problema que tengo actualmente muchas gracias y disculpen por quitarles su tiempo

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 May 2014 02:52 pm
Suena muy a problema de la universidad: Aplicar bubble sort en array de dos dimensiones ... usando AS ;)

La forma general de bubble sort en pseudocódigo es

Código :

for i = 1:n,
    swapped = false
    for j = n:i+1,
        if a[j] < a[j-1],
            swap a[j,j-1]
            swapped = true
    → invariant: a[1..i] in final position
    break if not swapped
end


Es decir dos loops, en donde el interior ejecuta el swap. Ahora un array de dos dimensiones, en cada posición tiene ... un array. Así en principio arrancaría recorriendo el array exterior, y luego ordenando cada uno de los arrays que me voy encontrando, eso me da 3 loops.
Solo tiro la idea, no es un tema fácil y prefiero que nos enseñes tu :)

Para quienes no conocen los "sorting algoritm" y les interesa el tema, pueden ver este artículo donde además de explicar la teoría, los aplico en Flex: http://flash-db.org/Main/2012/04/sorting-algorithms/

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 May 2014 04:19 pm

solisarg escribió:

Suena muy a problema de la universidad: Aplicar bubble sort en array de dos dimensiones ... usando AS ;)

La forma general de bubble sort en pseudocódigo es

Código :

for i = 1:n,
    swapped = false
    for j = n:i+1,
        if a[j] < a[j-1],
            swap a[j,j-1]
            swapped = true
    → invariant: a[1..i] in final position
    break if not swapped
end


Es decir dos loops, en donde el interior ejecuta el swap. Ahora un array de dos dimensiones, en cada posición tiene ... un array. Así en principio arrancaría recorriendo el array exterior, y luego ordenando cada uno de los arrays que me voy encontrando, eso me da 3 loops.
Solo tiro la idea, no es un tema fácil y prefiero que nos enseñes tu :)

Para quienes no conocen los "sorting algoritm" y les interesa el tema, pueden ver este artículo donde además de explicar la teoría, los aplico en Flex: http://flash-db.org/Main/2012/04/sorting-algorithms/

Jorge

no es tarea de universidad, realmente estoy creando un juego en Flash, y la única manera que se me ocurrió es agregando los MoviesClip en un array
otro Array para el valor de cada MovieClip y luego solo hago las comparaciones entre los valores de cada movieclip con su indice me entiendes?
el problema es que son muchos MoviesCLips y no quiero estar declarando cientos de variables, un ejemplo seria un juego de poker
para explciarte mejor:

Código C++ :

var Cards:Array;
Var CardsValue:Array;
Cards = 
[[2,   3,  4,  5,  6,  7,  8,  9, 10, "J", "Q", "K", "AS"], // este Array 0,N contiene los MoviesClips de las cartas de Corazones
 [2,   3,  4,  5,  6,  7,  8,  9, 10, "J", "Q", "K", "AS"], //este Array 1,N contiene  los MoviesClips de las cartas de Picas
 [2,   3,  4,  5,  6,  7,  8,  9, 10, "J", "Q", "K", "AS"], //este Array 2,N contiene los MoviesClips de las cartas de Trevol
 [2,   3,  4,  5,  6,  7,  8,  9, 10, "J", "Q", "K", "AS"]] //este Array 3,N contiene los MoviesClips de las cartas de Diamantes
// se que no puedo declarar variables de moviesclips que inicien con números pero esto es un ejemplo :)
CardsValue = 
[[40, 41, 42, 43, 44, 45, 46, 47, 48,  49,  50,  51,   52], // Este Array 0,N contiene los valores de cada cartas de Corazones
 [27, 28, 29, 30, 31, 32, 33, 34, 35,  36,  37,  38,   39], // Este Array 1,N contiene los valores de cada carta de picas
 [14, 15, 16, 17, 18, 19, 20, 21, 22,  23,  24,  25,   26], //Este Array 2,n contiene los valores de cada carta  de Trevol
 [ 1,  2,  3,  4,  5,  6,  7,  8,  9,  10,  11,  12,   13]] ;//Este Array 3,n contiene los valores de cada carta de Diamante

entoces con estos 2 arrays ya se que:
Cards[2][7] = 9 de trevols
y
ValueCards[2][7] = y su valor es 21
ya que tengo estos 2 arrays es mas facil hacer comparaciones de cual carta es mayor y cual es menor
sin necesidad de declarar cientos de variables me entiendes, ahora lo que quiero hacer?
nose como hacerlo de otra forma que no sea esta, si me puedes sugerir o guiarme te lo agradecería mucho, pero hasta ahora me quedo con mis arrays que locura jajajajaja muchas gracias por responderme ;)

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 May 2014 04:38 pm

Código :

var aux:Number = 0;
var n:Array;
var i,j,k,l;
n = [10,4,1,5,8,3,7,0,8,2,9,6,11,0,0,-1,12,-2,-3,-4];

trace("Original Array ("+n.length+" length):\n"+n,"\n-----------------------------");
for (i in n)
{
    for (j in n)
   {
       if(n[j] > n[i]) // > DESC || < ASC
       {
          aux = n[i];
          n[i] = n[j];
          n[j] = aux;
       };
   }
}
trace("Array descendent ("+n.length+" length):\n"+n.join('|'),"\n-----------------------------");

n = [
       [2,1,3,4],
       [5,8,6,7],
       [8,9,0,-1,-2]
      ];

trace("Original Bi-Array ("+n.length+" length):");
for (i in n)
{
   trace( "["+i+"]",n[i] );
}
trace("-----------------------------");

for (i in n)
{
   // trace("["+i+"]: [",n[i]+" ]");
   for (j in n[i])
   {
      for (k in n[i])
       {
          if(n[i][k] > n[i][j]) // > DESC || < ASC
          {
             aux = n[i][j];
             n[i][j] = n[i][k];
             n[i][k] = aux;
          };
       }
   }
}

trace("Array descendent ("+n.length+" length):");
for (i in n)
{
   trace( "["+i+"]",n[i].join("|") );
}
trace("-----------------------------");

Sirve? Algo asi se me presento alguna vez... y me gusto usar for ... in

Por comicSans

Claber

151 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 May 2014 11:11 pm
Array.sort() es más que suficiente para eso... y de hecho ni tenes necesidad de hacer un array multidimensional ...
Array.sort() y array.inverse() te permiten "flippear" el orden del array.
Por otro lado, hacer sort en un array que contiene arrays no tiene mucho sentido.
La vista (MovieClip) y el valor no tienen porque estar separados en distintos arrays, te conviene crear un objeto Card para eso... e inclusive aprovechar sortOn("property") para ordenarlos en funcion a la propiedad que quieras.

public class Card {
public var view:MovieClip;
public var value:int;
public function Card(p_view:MovieClip, p_value:int):void {
view = p_view;
value = p_value ;
}
}

sabes que tenes 13 cartas por palo, y 4 palos... es como hacer una grilla de tiles en un mapa, o una tabla de excel con columnas y filas y haces un metodo que te haga el offset en funcion a un indice de columna (palo) y fila (carta).

En fin, con que metodo ordenes el array me parece medio superfluo comparado con la implementación del juego en si... asi que, mi consejo, es que no la compliques de más y termines primero el juego, y despues agregues el sort bubble (si es que te hace falta).

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 May 2014 01:12 am
Bubble sort en as3

Bubble sort en java (prácticamente misma sintaxis que as3)

Aclaración (a tener siempre en cuenta como optimización) :
- Acceder a array.length en la condición del bucle ES LENTO.
- Hacer cálculo de index ( item[ i + 1 ]) para acceder dinámicamente a un item del array, ES LENTO, siempre hacer un casting del tipo de datos o usar una variable para estos casos.

Código ActionScript :

var len: int = array.length ;
for( var i:int; i < len; ++i )  ...

// para acceder a items.
array[ int( i + 1 )]
// o en su defecto 
var index:int = i + 1 ;
array[index]


Si bien las optimizaciones ni hagan diferencia para tu juego de cartas (pocos items y accesos), es bueno tenerlo en cuenta y usarlo como "buena práctica".

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 May 2014 03:13 pm

comicSans escribió:

Código :

var aux:Number = 0;
var n:Array;
var i,j,k,l;
n = [10,4,1,5,8,3,7,0,8,2,9,6,11,0,0,-1,12,-2,-3,-4];

trace("Original Array ("+n.length+" length):\n"+n,"\n-----------------------------");
for (i in n)
{
    for (j in n)
   {
       if(n[j] > n[i]) // > DESC || < ASC
       {
          aux = n[i];
          n[i] = n[j];
          n[j] = aux;
       };
   }
}
trace("Array descendent ("+n.length+" length):\n"+n.join('|'),"\n-----------------------------");

n = [
       [2,1,3,4],
       [5,8,6,7],
       [8,9,0,-1,-2]
      ];

trace("Original Bi-Array ("+n.length+" length):");
for (i in n)
{
   trace( "["+i+"]",n[i] );
}
trace("-----------------------------");

for (i in n)
{
   // trace("["+i+"]: [",n[i]+" ]");
   for (j in n[i])
   {
      for (k in n[i])
       {
          if(n[i][k] > n[i][j]) // > DESC || < ASC
          {
             aux = n[i][j];
             n[i][j] = n[i][k];
             n[i][k] = aux;
          };
       }
   }
}

trace("Array descendent ("+n.length+" length):");
for (i in n)
{
   trace( "["+i+"]",n[i].join("|") );
}
trace("-----------------------------");

Sirve? Algo asi se me presento alguna vez... y me gusto usar for ... in

Gracias por responder :)
pero solo los ordena por filas mira hasta aquí pude arreglar mi code:

Código C++ :

var n:Array;
var aux:Number = 0;
// Array 
n = 
[[2,1,3,4],
 [5,8,6,7],
 [8,9,0,-1]
 ];
 

 trace("          0 1 2 3");
 trace("        0[x,x,x,x]");
 trace("        1[x,x,x,x]");
 trace("        2[x,x,x,x]");
 
  trace("------------------------");
  trace("-----Original Array-----");

 for(var a:Number = 0; a<n.length; a++)
{
trace("         [" + n[a] + "]");

}
 trace("------------------------");
 trace("Size array: " + n.length);
 trace("------------------------");
 trace("Position of each element: ");
 trace("Position 0,0:" + " " + n[0][0]);
 trace("Position 0,1:" + " " + n[0][1]);
 trace("Position 0,2:" + " " + n[0][2]);
 trace("Position 0,3:" + " " + n[0][3]);
 trace("Position 1,0:" + " " + n[1][0]);
 trace("Position 1,1:" + " " + n[1][1]);
 trace("Position 1,2:" + " " + n[1][2]);
 trace("Position 1,3:" + " " + n[1][3]);
 trace("Position 2,0:" + " " + n[2][0]);
 trace("Position 2,1:" + " " + n[2][1]);
 trace("Position 2,2:" + " " + n[2][2]);
 trace("Position 2,3:" + " " + n[2][3]);
 trace("------------------------");
 trace(" ---Ordered array--- ");
 
 
for(var i:Number = 0; i<n.length; i++)
{
   for(var j:Number = 0; j<n.length; j++)
   {
      for(var k:Number = 0; k<n.length; k++)
      {
         for(var l:Number = 0; l<n.length; l++)
         {
            if(n[i][j]>n[k][l])
            {
               aux = n[i][j]; 
               n[i][j] = n[k][l]; 
               n[k][l] = aux;
            }
         }
      }
   }
}

for(var q:Number = 0; q<n.length; q++)
{
   for(var w:Number = 0; w<n.length; w++)
   {
      trace(n[q][w]);
   }
}

ya casi logro hacer la burbuja, solo que el ultimo elemento de cada fila no me lo esta tomando en cuenta, tampoco me lo imprime por pantalla

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 May 2014 03:20 pm

rodrigolopezpeker escribió:

Bubble sort en as3

Bubble sort en java (prácticamente misma sintaxis que as3)

Aclaración (a tener siempre en cuenta como optimización) :
- Acceder a array.length en la condición del bucle ES LENTO.
- Hacer cálculo de index ( item[ i + 1 ]) para acceder dinámicamente a un item del array, ES LENTO, siempre hacer un casting del tipo de datos o usar una variable para estos casos.

Código ActionScript :

var len: int = array.length ;
for( var i:int; i < len; ++i )  ...

// para acceder a items.
array[ int( i + 1 )]
// o en su defecto 
var index:int = i + 1 ;
array[index]


Si bien las optimizaciones ni hagan diferencia para tu juego de cartas (pocos items y accesos), es bueno tenerlo en cuenta y usarlo como "buena práctica".

Array.sort() es más que suficiente para eso... y de hecho ni tenes necesidad de hacer un array multidimensional ...
Array.sort() y array.inverse() te permiten "flippear" el orden del array.
Por otro lado, hacer sort en un array que contiene arrays no tiene mucho sentido.
La vista (MovieClip) y el valor no tienen porque estar separados en distintos arrays, te conviene crear un objeto Card para eso... e inclusive aprovechar sortOn("property") para ordenarlos en funcion a la propiedad que quieras.

public class Card {
public var view:MovieClip;
public var value:int;
public function Card(p_view:MovieClip, p_value:int):void {
view = p_view;
value = p_value ;
}
}

sabes que tenes 13 cartas por palo, y 4 palos... es como hacer una grilla de tiles en un mapa, o una tabla de excel con columnas y filas y haces un metodo que te haga el offset en funcion a un indice de columna (palo) y fila (carta).

En fin, con que metodo ordenes el array me parece medio superfluo comparado con la implementación del juego en si... asi que, mi consejo, es que no la compliques de más y termines primero el juego, y despues agregues el sort bubble (si es que te hace falta).


Gracias por responder!! no sabia eso, pero no logro entender tu ejemplo

Código C++ :

public class Card {
public var card1:MovieClip;
public var value:int;
public function Card(p_card1:MovieClip, p_value:int):void {
view = p_card1;
value = p_value ;
}
}

public class Card {
public var card2:MovieClip;
public var value:int;
public function Card(p_card2:MovieClip, p_value:int):void {
view = p_card2;
value = p_value ;
}
}


y como haria la comparación entre xcardn<=xcardn
de verdad necesito que me orienten y estoy muy agradecida por sus consejos y ayuda!!

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 17 May 2014 04:15 am
Mirá, acá te hice un proyecto de ejemplo
Es un proyecto Flash de IntelliJIdea, no se que IDE estas usando para programar, igualmente, lo que importan son las clases DemoCards.as (Main document class) y Card.as (que solo guarda la vista, id y palo como te comente).
Toda la lógica esta en DemoCards, creo que lo comenté bastante, pero no deja de ser medio "avanzado" en términos de API de Flash e implementación. Igualmente, sería bueno que estudies cada parte del código, y te fijes como se arma el maso de arranque, ya que me pareció interesante que veas como usar un spritesheet (para no lidiar con 54+ MovieClips para cada carta). Los Spritesheets se usan para armar como una librearía de movieclips en una sola imagen, es como se programaron la mayoría de videojuegos 2D de consola, y casi todos los juegos html5, mobile, etc.
En fin, es práctico para "parsear" y crear las imagenes a usar, a partir del mismo.
El software que usa para "separar" la imagen original, y generar el spritesheet (con el XML) es ShoeBox, una aplicación MUY UTIL hecha con Adobe AIR, que uso siempre :)

En fin, el spritesheet solo se usa para generar el bitmap, si vos vas a usar MovieClips, sólo enfocate a partir de la linea 100 donde se generan las Cards.

Suerte con tu tarea.

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 May 2014 04:13 pm

rodrigolopezpeker escribió:

Mirá, acá te hice un proyecto de ejemplo
Es un proyecto Flash de IntelliJIdea, no se que IDE estas usando para programar, igualmente, lo que importan son las clases DemoCards.as (Main document class) y Card.as (que solo guarda la vista, id y palo como te comente).
Toda la lógica esta en DemoCards, creo que lo comenté bastante, pero no deja de ser medio "avanzado" en términos de API de Flash e implementación. Igualmente, sería bueno que estudies cada parte del código, y te fijes como se arma el maso de arranque, ya que me pareció interesante que veas como usar un spritesheet (para no lidiar con 54+ MovieClips para cada carta). Los Spritesheets se usan para armar como una librearía de movieclips en una sola imagen, es como se programaron la mayoría de videojuegos 2D de consola, y casi todos los juegos html5, mobile, etc.
En fin, es práctico para "parsear" y crear las imagenes a usar, a partir del mismo.
El software que usa para "separar" la imagen original, y generar el spritesheet (con el XML) es ShoeBox, una aplicación MUY UTIL hecha con Adobe AIR, que uso siempre :)

En fin, el spritesheet solo se usa para generar el bitmap, si vos vas a usar MovieClips, sólo enfocate a partir de la linea 100 donde se generan las Cards.

Suerte con tu tarea.

Muchas gracias por darme ese ejemplo <3!!!!!!! siento que te amo jajajaja :$
muy bueno el code, algo medio complejo pero lo estoy entendiendo gracias de verdad!
ya entiendo a lo que te referias con los sprites. ese ejemplo te crea hasta las cartas! nunca me imagine que se pudiera hacer eso, yo pense que las cartas eran movieclips y habían 54 , pero no.

Tengo otra problemita :$
estoy tratando de hacer mi ejemplo guiándome de ese, el problema es que yo no voy a utilizar sprites porque estoy usando cartas españolas, tuve que scaner las 40 cartas para convertirlas a digital, luego las importe a la biblioteca y las convertir en moviesclips.
El problema es que no puedo definir las 40 cartas con un mismo nombre de clases.
y quiero evitarme esto:
var card1:oro1 = new oro1
var card2:oro2 = new oro2
etc...
no hay forma de hacer algo como esto ?
var MyDeck:Deck = new Deck;
osea de definir todas las cartas con el nombre de una clase para instanciarlas, para vincularlas a AS?
alguna recomendación ? y muchas gracias de verdad!

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 May 2014 04:27 pm
La idea en flash es que creas un solo MovieClip, pones un bitmap en cada uno de los fotogramas, al momento de instanciar haces un gotoAndStop(fotograma), puedes hacerlo usando un contador y mostrar cada una de las cartas, guardas en una propiedad interna que carta es.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 May 2014 05:00 pm

solisarg escribió:

La idea en flash es que creas un solo MovieClip, pones un bitmap en cada uno de los fotogramas, al momento de instanciar haces un gotoAndStop(fotograma), puedes hacerlo usando un contador y mostrar cada una de las cartas, guardas en una propiedad interna que carta es.

Jorge

mas o menos te entendi es algo asi:
Bitmap = carta convertida en movieclip o antes de convertirla? creo que es antes de convertirla a movieclip
luego coloco cada carta en 1 fotograma diferente, tambien entiendo lo de gotoAndStop(x fotograma) lo que no entendi fue lo de"al momento de instanciar" instancio a través de as3? nose me perdi ahí disculpa

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 May 2014 08:24 pm
Importas a Flash como jpg o cualquiera sea el formato en que los hayas creado, aparecerán como graphic en la biblioteca. Luego creas un MovieClip nuevo, y en cada uno de sus fotogramas vas arrastrando el graphic correspondiente, así tienes un MovieClip con 52 fotogramas (53 si quieres agregar una carta mostrando el lomo). Luego a ese MovieClip le das el nombre de clase que quieras, y escribes esa clase con todo lo que necesites. Puedes instanciarlo desde el IDE simplemente arrastrando el clip al escenario o lo puedes hacer por código haciendo

var mazo:Mazo = new Mazo();
addChild(mazo);
(...)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 May 2014 11:27 pm
Oh, podes cargar los jpgs/pngs dinamicamente con Loader... para no agregar cada carta en un frame...
Esto es un pseudo codigo que escribo de ejemplo directamente en el post, asi que disculpas de antemano si hay algo que no funque... es solo de referencia.


Código ActionScript :

var cardsURLs:Array = ["oro1.jpg","oro2.jpg","oro3.jpg","oro4.jpg","oro5.jpg","espada1.jpg"] ;// y asi sucesivamente con todas las rutas de imagenes que tengas lo guardas en el array.
var loader:Loader = new Loader() ;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded )
// empieza la carga...
loadNextCard() ;


function onImageLoaded(e:Event):void{
loadedCards[currentCardURL] = event.target.content ; // event.target.content contiene bitmap de la carta.
loadNextCard() ;
}

function loadNextCard():void{
// si no quedan mas url de cartas en el array, es que ya termino de cargarlas todas.
if(cardsToLoad.length == 0 ) {
loadComplete();
return ;
}
currentCardURL = cardsToLoad.unshift() ; // saca el primer elemento [0].
loader.load(new URLRequest(currentCardsURL)) ;
}

function loadComplete():void{
trace("todas las cartas cargadas, bitmap: ", loadedCards["oro1.jpg"] );
}

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 May 2014 03:22 am
Gracias por responderme pero Dios Mio!!!, que complicado esta!!! ya me estoy volviendo loca!
no existe una forma de instanciar multiples objetos a traves de un for ?

solisarg escribió:

Importas a Flash como jpg o cualquiera sea el formato en que los hayas creado, aparecerán como graphic en la biblioteca. Luego creas un MovieClip nuevo, y en cada uno de sus fotogramas vas arrastrando el graphic correspondiente, así tienes un MovieClip con 52 fotogramas (53 si quieres agregar una carta mostrando el lomo). Luego a ese MovieClip le das el nombre de clase que quieras, y escribes esa clase con todo lo que necesites. Puedes instanciarlo desde el IDE simplemente arrastrando el clip al escenario o lo puedes hacer por código haciendo

var mazo:Mazo = new Mazo();
addChild(mazo);
(...)

Jorge

cuando te refieres a "Luego creas un MovieCLip Nuevo" es una capa ? de verdadita no entendi disculpame de verdad.

rodrigolopezpeker escribió:

Oh, podes cargar los jpgs/pngs dinamicamente con Loader... para no agregar cada carta en un frame...
Esto es un pseudo codigo que escribo de ejemplo directamente en el post, asi que disculpas de antemano si hay algo que no funque... es solo de referencia.


Código ActionScript :

var cardsURLs:Array = ["oro1.jpg","oro2.jpg","oro3.jpg","oro4.jpg","oro5.jpg","espada1.jpg"] ;// y asi sucesivamente con todas las rutas de imagenes que tengas lo guardas en el array.
var loader:Loader = new Loader() ;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded )
// empieza la carga...
loadNextCard() ;


function onImageLoaded(e:Event):void{
loadedCards[currentCardURL] = event.target.content ; // event.target.content contiene bitmap de la carta.
loadNextCard() ;
}

function loadNextCard():void{
// si no quedan mas url de cartas en el array, es que ya termino de cargarlas todas.
if(cardsToLoad.length == 0 ) {
loadComplete();
return ;
}
currentCardURL = cardsToLoad.unshift() ; // saca el primer elemento [0].
loader.load(new URLRequest(currentCardsURL)) ;
}

function loadComplete():void{
trace("todas las cartas cargadas, bitmap: ", loadedCards["oro1.jpg"] );
}

el problema de este metodo seria como luego puedo comparar los valores de cada carta? por eso el array con un for es mucho mas facil de hacer este metodo pero no encuentro la forma :'(

quiero lograr algo como esto
tengo un boton en mi escenario, y cuando lo clickee que aparescan todas las cartas asi como esta foto:

para eso pienso yo que mis cartas (Moviesclips) tienen que estar en un Array para que un for las recorra el mismo y sepa cuantas cartas hay, y en total
mi code es este:

Código C++ :

var CardsMcs:array: [[basto1,basto2,basto3] ,
                              [basto4,basto4,basto5],
                              [basto6,basto7,basto8]];
for (var i:Number = 0; i<=CardsMcs; i++ )
     {
           for j:Number = 0 i<=CardnsMCs; j++)
          {   
          CardsMcs[i][j].y = (i * 16) + 10;
          CardsMcs[i][j].x = 30;
                AddChild(CardsMcs[i][j])
           }
}


el problema es que no puedo instanciar todas las cartas con un nombre para 1 sola clase llamada Deck
nose si me entienden
por eso es mi duda, no existe otra manera de instanciar multiples objetos de forma mas eficaz? me refiero instanciar en AS3

Por Jenniferp

9 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 May 2014 07:28 pm
Mirá, vos podes instanciar lo que quieras... sólo tenes que tratar de abstraerte un poco más la idea de como programas, por eso, tenes que entender que la utilidad de como lo encaras es relativa, hay muchas formas de lograr un mismo resultado con el codigo.

Para hacerla corta, si vos tenes un array con todas las clases (movieclip con id de la libreria)...
siguiendo tu codigo:

Código :

var cardsClasses:Array = [[basto1,basto2, basto3, basto4],[espada1,espada2, espada3, espada4]];
var cardMcs:Array = [];

for(var i:int;i<cardsMcs.length;++i){
cardMcs[i]=[];
for(var j:int;j<cardsMcs[i].length;++j){
// aca instancias la clase
var cartaClase:Class=cardsMcs[i][j] as Class ;
var view:MovieClip = new cartaClase();
view.y = (i * 16) + 10;
view.x = 30;
cardMcs[i][j]=view; // aca guardas el movieclip en el array.
addChild(view)
}
}

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 May 2014 10:44 pm

rodrigolopezpeker escribió:

Mirá, vos podes instanciar lo que quieras... sólo tenes que tratar de abstraerte un poco más la idea de como programas, por eso, tenes que entender que la utilidad de como lo encaras es relativa, hay muchas formas de lograr un mismo resultado con el codigo.

Para hacerla corta, si vos tenes un array con todas las clases (movieclip con id de la libreria)...
siguiendo tu codigo:

Código :

var cardsClasses:Array = [[basto1,basto2, basto3, basto4],[espada1,espada2, espada3, espada4]];
var cardMcs:Array = [];

for(var i:int;i<cardsMcs.length;++i){
cardMcs[i]=[];
for(var j:int;j<cardsMcs[i].length;++j){
// aca instancias la clase
var cartaClase:Class=cardsMcs[i][j] as Class ;
var view:MovieClip = new cartaClase();
view.y = (i * 16) + 10;
view.x = 30;
cardMcs[i][j]=view; // aca guardas el movieclip en el array.
addChild(view)
}
}


Código C++ :

var cardsClasses:Array = [[basto1,basto2, basto3, basto4],[espada1,espada2, espada3, espada4]];// esto son los nombres para el llamado en as3 cierto ? nombre de clase de cada objeto verdad?
var cardMcs:Array = []; // esto es lo que no entiendo xq pones el array vacio ?

for(var i:int;i<cardsMcs.length;++i){ // aqui en tamaño es 0 xq CardMcs.length si en el array no hay ningun valo ? eso es lo que no entiendo no logro que funcione.
cardMcs[i]=[];
for(var j:int;j<cardsMcs[i].length;++j){
// aca instancias la clase
var cartaClase:Class=cardsMcs[i][j] as Class ;
var view:MovieClip = new cartaClase();
view.y = (i * 16) + 10;
view.x = 30;
cardMcs[i][j]=view; // aca guardas el movieclip en el array.
addChild(view)
}

Por Jenniferp

9 de clabLevel



 

chrome

 

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