Progettazione e Sviluppo di un Multiplayer Online Game su Reti Peer-to-Peer
Alma Mater Studiorum Universit`a degli Studi di Bologna Facolta` di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Scienze di Internet Tesi di Laurea in Laboratorio di Programmazione Internet
Alma Mater Studiorum Universit`a degli Studi di Bologna
Facolta` di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Scienze di Internet
Tesi di Laurea in Laboratorio di Programmazione Internet
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
82 CAPITOLO 3. IMPLEMENTAZIONE<br />
Come illustra<strong>to</strong> nel capi<strong>to</strong>lo 2.4, ogni SharedComponent è identifica<strong>to</strong> da<br />
<strong>un</strong> GlobalID, qui implementa<strong>to</strong> attraverso l’attribu<strong>to</strong> ID ed <strong>un</strong> Value, qui<br />
rappresenta<strong>to</strong> sot<strong>to</strong> forma <strong>di</strong> stringa nell’attribu<strong>to</strong> SerializedValue: tipicamente,<br />
com<strong>un</strong>que, ogni classe che ere<strong>di</strong>ta da SharedComponents contiene al<br />
<strong>su</strong>o interno <strong>un</strong>a variabile privata appositamente tipizzata, a<strong>di</strong>bita alla memorizzazione<br />
del valore vero e proprio.<br />
Facoltativamente possono essere valorizzati anche gli attributi ParentID e<br />
LocalID, se l’istanza <strong>di</strong> SharedComponent si tratta <strong>di</strong> <strong>un</strong> sot<strong>to</strong>-componente.<br />
Inoltre ogni istanza <strong>di</strong> SharedComponent può essere “taggata” per essere raggruppata,<br />
in<strong>di</strong>viduata o filtrata in maniera efficace.<br />
Dal p<strong>un</strong><strong>to</strong> <strong>di</strong> vista f<strong>un</strong>zionale, sono presenti quattro me<strong>to</strong><strong>di</strong> virtuali <strong>di</strong><br />
inizializzazione: il primo, Initialize(), chiama in sequenza gli altri tre: InitializeClass(),<br />
InitializeSubComponents() e InitializeUpdate(). Possono <strong>su</strong>bire<br />
quin<strong>di</strong> <strong>un</strong>’override nel caso le operazioni <strong>di</strong> default non implementino le f<strong>un</strong>zionalità<br />
richieste, o lo facciano solo in parte.<br />
Ad esempio il componente Object3D esegue sia <strong>un</strong> override <strong>di</strong> Initialize-<br />
Class(), nel quale viene aggi<strong>un</strong><strong>to</strong> <strong>un</strong> Tag “View” dal momen<strong>to</strong> che si tratta<br />
<strong>di</strong> <strong>un</strong> componente au<strong>to</strong>maticamente lega<strong>to</strong> ad <strong>un</strong> elemen<strong>to</strong> grafico, sia <strong>un</strong><br />
override <strong>di</strong> InitializeSubComponents() per istanziare i due sot<strong>to</strong>componenti<br />
Vec<strong>to</strong>r3 Position e Vec<strong>to</strong>r3 Rotation. Ogni componente, <strong>di</strong> default, è tagga<strong>to</strong><br />
con il tag Constants.ComponentTag NotifyChange, che ne attiva la notifica<br />
au<strong>to</strong>matica <strong>su</strong>lle mo<strong>di</strong>fiche apportate al valore del componente stesso.<br />
La f<strong>un</strong>zione <strong>di</strong> InitializeUpdate() è strettamente legata al me<strong>to</strong>do virtuale<br />
Update(): <strong>di</strong> default infatti, se il componente che ere<strong>di</strong>ta da SharedComponent<br />
esegue <strong>un</strong> override <strong>di</strong> Update, in InitializeUpdate ques<strong>to</strong> verrà registra<strong>to</strong><br />
nel proprio Manager <strong>di</strong> appartenenza come componente da aggiornare ad<br />
ogni iterazione.<br />
SharedComponent espone inoltre <strong>un</strong>a serie <strong>di</strong> me<strong>to</strong><strong>di</strong> accessori per la gestione<br />
au<strong>to</strong>matizzata dei sot<strong>to</strong>-componenti (Add(), Remove(), FindByLocalID(),