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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

42 CAPITOLO 2. ARCHITETTURA SOFTWARE<br />

“ComponentScript” è <strong>un</strong>a classe base per l’implementazione della logica e<br />

delle <strong>di</strong>namiche <strong>di</strong> aggiornamen<strong>to</strong> dei componenti; a <strong>su</strong>a volta ere<strong>di</strong>ta dalla<br />

classe Behavior, e permette <strong>di</strong> definire le classiche fasi <strong>di</strong> “Inizializzazione”,<br />

“Aggiornamen<strong>to</strong>” e “Distruzione”. La <strong>su</strong>a peculiarità è quella <strong>di</strong> consentire<br />

<strong>un</strong>a separazione formale <strong>di</strong> quelle quelle che sono le azioni e gli aggiornamenti<br />

da eseguire in ogni singola fase a seconda che si tratti <strong>di</strong> <strong>un</strong> componente<br />

appartenente al proprio <strong>Peer</strong> o meno.<br />

Ad ogni “ComponentScript” viene associa<strong>to</strong> il GlobalID del componente <strong>di</strong><br />

cui si vuole definirne la logica <strong>di</strong> aggiornamen<strong>to</strong>.<br />

Ad esempio, Il componente logico <strong>di</strong> tipo “Character” (esteso da “Object3D”)<br />

identifica lo sta<strong>to</strong> del personaggio comanda<strong>to</strong> dal gioca<strong>to</strong>re. Ques<strong>to</strong><br />

viene tradot<strong>to</strong> au<strong>to</strong>maticamente nel rispettivo elemen<strong>to</strong> grafico, ma le<br />

politiche <strong>di</strong> aggiornamen<strong>to</strong> e sincronizzazione vengono definite dalla classe<br />

“CharacterScript”, estesa app<strong>un</strong><strong>to</strong> da “ComponentScript”.<br />

Qui, a seconda della proprietà del componente, CharacterScript esegue due<br />

me<strong>to</strong><strong>di</strong> <strong>di</strong>stinti. Per la fase <strong>di</strong> Update, ad esempio, il <strong>Peer</strong> “Owner” eseguirà<br />

il me<strong>to</strong>do “Update Writer”, mentre tutti gli altri eseguiranno il me<strong>to</strong>do “Update<br />

Reader”.<br />

Siano <strong>Peer</strong> “A” e <strong>Peer</strong> “B” due <strong>Peer</strong> connessi e sincronizzati a livello <strong>di</strong><br />

Data Layer, e sia il componente “A 12 ” <strong>di</strong> tipo “Character” il componente<br />

che identifica lo sta<strong>to</strong> relativo al personaggio controlla<strong>to</strong> dal Player “A”, il<br />

“ComponentScript” applica<strong>to</strong> alla relativa istanza grafica si dovrà comportare<br />

in modo <strong>di</strong>fferente nel contes<strong>to</strong> View dei due <strong>Peer</strong>.<br />

Su <strong>Peer</strong> “A”, infatti, dovrà aggiornare le coor<strong>di</strong>nate dell’ogget<strong>to</strong> 3D a seconda<br />

degli input del gioca<strong>to</strong>re (ad esempio, <strong>su</strong> pressione dei tasti <strong>di</strong>rezionali, o<br />

W-A-S-D, verrà mosso l’ogget<strong>to</strong>), e, a intervalli <strong>di</strong> tempo prefissati, scrivere<br />

le <strong>su</strong>e attuali coor<strong>di</strong>nate all’interno del rispettivo componente logico.<br />

Su <strong>Peer</strong> “B”, invece, dovrà leggere il valore delle coor<strong>di</strong>nate valorizzate nel rispettivo<br />

componente logico, ed interpolarle con le coor<strong>di</strong>nate dell’ogget<strong>to</strong>3D<br />

del contes<strong>to</strong> View (Figura 2.16).

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

Saved successfully!

Ooh no, something went wrong!