¿Quieres registrarte?

Posicionar objetos en una cuadrícula con ActionScript 3

Por: penHolder
10 de Septiembre del 2008
2905 de clabLevel
Otros artículos de penHolder
4,610 visitas

Ésta es una clase muy simple que dispone elementos traídos desde la biblioteca, y antes de haberlos duplicado, los ubica en filas y columnas. Esta clase puede ser el principio para armar galerías de fotos, botoneras, etc., ya que puede recibir tanto MovieClips como Sprites. Conseguí acabarla después de unos pequeños tropiezos, que el Gran Maestro Z supo solucionar :alabado:
Veamos, lo primero que necesitamos es un clip en la biblioteca instanciado y exportado para ActionScript.
Una vez echo esto vamos con la clase:


Nota: prestar atención a los comentarios donde se explica el código

Código :

package com.penholder.display.mc{
   //
   import flash.display.DisplayObject;
   import flash.display.MovieClip;
   //
   public class DisplayMovieClipAsGrid extends MovieClip {
      //
      private var _clip:DisplayObject; // este sera el clip que le pasaremos desde la biblioteca
      private var _n:Number;           // la cantidad de clips a duplicar
      private var _column:Number;      // cantidad de columnas
      private var _space:uint;         // la separación entre los elemntos
      private var _posX:uint;          // las posiciones tanto en x
      private var _posY:uint;          // como en y
      //
      public function DisplayMovieClipAsGrid(clip:DisplayObject, n:Number, column:Number, space:uint):void {
         
         // pasamos las propiedades del constructor
         _clip = clip;
         _n = n;
         _posX = 0;
         _posY = 0;
         _column = column;
         _space = space;
         //
         buildGrid();
      }
      //
      private function buildGrid():void {
         //
         for (var i:uint = 0; i < _n; i++) {

            /* le pasamos a un nuevo objeto del tipo DisplayObject 
                una nueva instancia del clip original en  cada vuelta del for,
                el uso del displayObecto es lo q nos permite utilizar cualquier tipo de contenedor */
            var mc:DisplayObject = new (Object(_clip).constructor); 

                // ahora los vamos ubicando separados por el parametro "space"
            mc.x = (mc.width + _space) * _posX;
            mc.y = (mc.height + _space) * _posY;
            _posX++;

            // entonces una vez que se alcanzo el numero de columnas bajamos de fila
            if (_posX == _column) {
               _posX = 0;
               _posY++;
            }
                // final mente añadimos todos los clips al contenedor
            addChild(mc);
         }
      }
   }
}


Y en el fla tendríamos:

Código :

import com.penholder.display.mc.DisplayMovieClipAsGrid;
//
var Grid:DisplayMovieClipAsGrid = new DisplayMovieClipAsGrid(new Clip(), 12, 3, 5);
addChild(Grid);

De esta forma new Clip() es el objeto instanciado con esa clase en la biblioteca.

Como se puede ver la clase permite ordenar en una cuadrícula, así como también en una sola filo o columna, bastaría con asignar la misma cantidad de objetos a duplicar como de columnas, para un alineación solo horizontal; o bien una sola columna para que se dispongan en forma vertical.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3

Comentarios | Enviar un comentario
Está muy bien ^^
Molaría que tuviera algunas opciones más, como que permitiera elegir el número de filas, en vez de el de columnas, o incluso pasarle un objeto del tipo Rectangle, y que los elementos se ajustaran de la mejor manera a él.


pd: la grilla es la esposa del grillo XD XD
Por: Zah
como se usan las matrices bidimensionales para posicionar objetos en una cuadricula??? :S
Por: nazcaline

nazcaline :

como se usan las matrices bidimensionales para posicionar objetos en una cuadricula???
Mirate estos tips
http://www.cristalab.com/foros/t42236_arrays-multidimensionales-en-actionscript.html
http://www.cristalab.com/tips/42262/clase-de-actionscript-3-para-arrays-multidimensionales.html
Por: Zguillez
muy bueno, pero para estos casos, siempre es bueno colocar un ejemplo
Por: eldervaz

eldervaz-blog :

muy bueno, pero para estos casos, siempre es bueno colocar un ejemplo

el codigo anterior da:


Por: penHolder
Se puede hacer con un único for usando el operador módulo
Además, sería conveniente que devolviera en un array los elementos creados, por si se quiere hacer algo con ellos
Por: Eliseo-blog
necesito despalzar un movieclip dentro de una matriz de 10 *10 hacia culquier lugar, cuando de click en ella
Por: malpher
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.