08.09.2019 Views

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

SHOW MORE
SHOW LESS

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(),

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!