Undolibrary MatrixArray: un’estensione della classe Array

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:

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

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

clip()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * Restitusice un porzione rettangolare della matrice nella forma MatrixArray
 *
 * @param    (uint)            sx Coordina x del taglio
 * @param    (uint)            sy Coordina y del taglio
 * @param    (uint)            cw Dimensione orizzontale del taglio
 * @param    (uint)            ch Dimensione verticale del taglio
 * @result    (MatrixArray)    Una nuova matrice cw x ch
 *
 */

clip(sx:uint, sy:uint, cw:uint, ch:uint):MatrixArray

// esempio
// crea una nuova MatrixArray dalle coordinate 2,2 e larga e alta 5
var nma:MatrixArray = ma.clip(2, 2, 5, 5);

fill()

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

fill(v:*);

paintChar()

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

paintChar(v:string)

// esempio

var ma:MatrixArray = new MatrixArray(10,5);
ma.paintChar(
    '**********'+
    '**##**##**'+
    '**********'+
    '**#####**'+
    '**********'
);

flipH(), flipV()

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

flipH():void
flipV():void

move()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * Sposta il contenuto della matrice (eseguendo uno shift) nelle quattro
 * direzione di un offeset prestabilito
 */

move(ox:int, oy:int):void
//

var ma:MatrixArray = new MatrixArray(10,5);
ma.paintChar(
    '**********'+
    '**##**##**'+
    '**********'+
    '**#####**'+
    '**********'
);
ma.move(2,4);

// output
****##**##
**********
****#####
**********
**********

peek()

1
2
3
4
/**
 * Restituisce il contenuto della matrice alle coordinate x, y
 */

peek(x:uint, y:uint):*

poke()

1
2
3
4
/**
 * Imposta il contenuto della matrice alle coordinate x, y
 */

poke(x:uint, y:uint):void

getString()

1
2
3
4
/**
 * Usato spesso per il debug restituisce la matrice nxm come stringa
 */

getString():String

Non ci sono commenti per questo Post

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> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL