Data is one thing, data visualization is another. Data format should be independent of the way data is shown on screen.

I normally do it like this:
   
       private static const ELEMENTS_PER_LINE:Number = 3;

        private function getGridPosition(i:Number):Point
        {
            var p:Point = new Point();
           
            p.y = Math.floor(i / ELEMENTS_PER_LINE);
            p.x = i % ELEMENTS_PER_LINE;
           
            return p;
        }   

        public function addElements(elements:Array):void
        {
            for (var i:Number = 0; i < elements.length; ++i)
            {
                var obj:Object = elements[i];
               
                var instance:MyClass= new MyClass(obj);
                addChild(instance);
                         
                var p:Point = getGridPosition(i);
               
                instance.x = (instance.width * p.x);
                instance.y = (instance.height * p.y);            
            }
        }


Hope it helps.

João Saleiro

Untitled Document
João Saleiro

Email/MSN: [EMAIL PROTECTED]
Skype: joao.saleiro
Tel: +351 916 077 097 / +351 968 203 370
WWW: http://www.webfuel.pt


Marcelo de Moraes Serpa wrote:
Hello,

I've been doing some study on how to create a grid-like representation of flat-based arrays.

Considering you are working with a data backend that will server you a one-dimensional array like this:

var arr = [1,2,3,4,5,6,7,8,9,0]

And you would like to render in in your flash applications (or whatever) like a grid/matrix:

1,2,3,4
5,6,7,8
9,0

The way I do it currently:

<as2 code>

//First I decide on a condition to when I will "reset the column pointer and do a line break"

var MAX_COLS = 4;

for (i=0; i < arr.length; i++)
{
   if (i % MAX_COLS == 0 && i != 0)
    {
         rows++;
     }

    var thumb_mc.x = i*(thumb_mc.width) + offset;
    var thumb_mc-y = rows*(thumb_mc.height) + offset;

}

</as2 code>

Not that this is pseudo-code, I haven't actually tested it, but you can get the idea.

I could have used a cols variable in the place of using the i counter and just replace the condition with the modulus with a "if cols > MAX_COLS", since I would be reseting (cols = 0) this var when this condition were true:

if (cols >= MAX_COLS)
{
  cols = 0;
  rows++
}

Now, what bothering me is the two dimensional array usually used in tile-based games.

I was thinking this morning that maybe it would be easier to just convert the flat-based array to a two dimensional one beforehand, like this:

var arr = [[1,2,3,4],[5,6,7,8],[9,0]];

and then use a loop like:

for (i = 0; i < arr.length; i ++) {
  for (j = 0; j < arr[i].lentgh; j++) {
     thumb_mc.x = i*thumb_mc.width + offset;
     thumb_mc.y = j*thumb_mc.height + offset;
  }
}

Please, correct me if I'm wrong on any of these points/code.

What do you think?

Thanks in advance,

PS.: Btw, is there a book or something that has recipes/patterns for such problems ? (like:  ways to render data in  a grid-based fashion).

Marcelo.










_______________________________________________ osflash mailing list [email protected] http://osflash.org/mailman/listinfo/osflash_osflash.org


_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org

Reply via email to