Undolibrary MatrixArray: un’estensione della classe Array

Lunedì 15 Settembre, 2008

MatrixArray è un'estensione della classe Array di Actionscript 3.0, con lo scopo di semplificare la manipolazione di Array lineari usati come matrice n x m. Questa classe fa parte della libreria Undolibrary (nel package undolibrary.utils.MatrixArray) che potete scaricaricare liberamente da Google code tramite un qualsiasi client SVN (Subversion) all'indirizzo:
svn checkout http://undolibrary.googlecode.com/svn/trunk/
In alternativa potete scaricare il solo file MatrixArray.as. Un'esempio dell'uso di matrici lineari è stato dato in Actionscript 3.0 for beginners: lesson #2 dove abbiamo visto un suo semplice uso nella realizzazione del classico game Tic Tac Toe. Una matrice di questo tipo è paragonabile ad un'area rettangolare (wxh), proprio come una scacchiera. Con questa classe è possibile trattare una matrice di questo tipo proprio come un reticolo con delle sue coordinate x ed y. La MatrixArray l'ho usata, ad esempio, nello sviluppo di tutta la logica dell'editor di Emotions Icons per Skype: Skypemote.

Metodi

La classe MatrixArray estende quindi la normale classe Array aggiungendo una serie di utili metodi per gestire e manipolare matrici n x m. Per creare una matrice n x m è sufficente usare:

Actionscript:
  1. // importanzione della classe - se avete scaricato l'intera libreria Undolibrary
  2. // in alternativa potete scaricare solo il file MatrixArray.as e usarlo da solo
  3. import undolibrary.utils.MatrixArray;
  4. //
  5. var ma:MatrixArray = new MatrixArray(10, 10);

Creata la matrice 10x10, come nel precedente esempio, possiamo manipolarla con utili metodi che rendono il nostro lavoro estremamente più rapido e semplice. In effetti la matrice 10x10 non è altro che un semplice Array lineare di 100 elementi!

clip()

Actionscript:
  1. /**
  2. * Restitusice un porzione rettangolare della matrice nella forma MatrixArray
  3. *
  4. * @param    (uint)            sx Coordina x del taglio
  5. * @param    (uint)            sy Coordina y del taglio
  6. * @param    (uint)            cw Dimensione orizzontale del taglio
  7. * @param    (uint)            ch Dimensione verticale del taglio
  8. * @result    (MatrixArray)    Una nuova matrice cw x ch
  9. *
  10. */
  11. clip(sx:uint, sy:uint, cw:uint, ch:uint):MatrixArray
  12.  
  13. // esempio
  14. // crea una nuova MatrixArray dalle coordinate 2,2 e larga e alta 5
  15. var nma:MatrixArray = ma.clip(2, 2, 5, 5);

fill()

Actionscript:
  1. /**
  2. * Riempie la matrice con un determinato valore
  3. *
  4. * @param    (any)    Valore da inserire nella matrice
  5. */
  6. fill(v:*);

paintChar()

Actionscript:
  1. /**
  2. * Riempie la matrice con un (solo) carattere prelevato da una stringa
  3. * di lunghezza pari alle dimensioni della matrice stessa
  4. *
  5. * @param    (string)    v Stringa con la serie di caratteri da mappare
  6. * @result    (boolean)    true ok, false errore: stringa di lunghezza errata
  7. *
  8. */
  9. paintChar(v:string)
  10.  
  11. // esempio
  12.  
  13. var ma:MatrixArray = new MatrixArray(10,5);
  14. ma.paintChar(
  15.     '**********'+
  16.     '**##**##**'+
  17.     '**********'+
  18.     '**#####**'+
  19.     '**********'
  20. );

flipH(), flipV()

Actionscript:
  1. /**
  2. * Esegue un'operazione di riflessione orizziontale(flipH) o
  3. * vertical (flipV) direttamente sulla matrice
  4. */
  5. flipH():void
  6. flipV():void

move()

Actionscript:
  1. /**
  2. * Sposta il contenuto della matrice (eseguendo uno shift) nelle quattro
  3. * direzione di un offeset prestabilito
  4. */
  5. move(ox:int, oy:int):void
  6. //
  7.  
  8. var ma:MatrixArray = new MatrixArray(10,5);
  9. ma.paintChar(
  10.     '**********'+
  11.     '**##**##**'+
  12.     '**********'+
  13.     '**#####**'+
  14.     '**********'
  15. );
  16. ma.move(2,4);
  17.  
  18. // output
  19. ****##**##
  20. **********
  21. ****#####
  22. **********
  23. **********

peek()

Actionscript:
  1. /**
  2. * Restituisce il contenuto della matrice alle coordinate x, y
  3. */
  4. peek(x:uint, y:uint):*

poke()

Actionscript:
  1. /**
  2. * Imposta il contenuto della matrice alle coordinate x, y
  3. */
  4. poke(x:uint, y:uint):void

getString()

Actionscript:
  1. /**
  2. * Usato spesso per il debug restituisce la matrice nxm come stringa
  3. */
  4. getString():String

Post correlati

Lascia un commento

TAG XHTML permessi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Usa <pre> per racchiudere codice