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.

52 CAPITOLO 2. ARCHITETTURA SOFTWARE<br />

no <strong>un</strong> aggiornamen<strong>to</strong> perio<strong>di</strong>co che mo<strong>di</strong>ficherà au<strong>to</strong>maticamente lo sta<strong>to</strong> dei<br />

componenti <strong>su</strong>i loro Data Layer. Ques<strong>to</strong> si ripercuoterà <strong>su</strong>i rispettivi Layer<br />

View, che, attraverso i “ComponentScript” associati ai rispettivi oggetti grafici,<br />

ne mo<strong>di</strong>ficheranno le coor<strong>di</strong>nate secondo <strong>un</strong>a politica <strong>di</strong> Dead Reckoning<br />

(Figura 2.22).<br />

2.7.2 Collisione tra oggetti<br />

La collisione tra elementi grafici è <strong>un</strong> altro aspet<strong>to</strong> caratteristico delle<br />

<strong>di</strong>namiche presenti nei videogiochi. Non solo, è anche <strong>un</strong>o degli aspetti più<br />

sensibili e influenti <strong>su</strong>l flusso <strong>di</strong> gioco, poiché questi possono rappresentare<br />

<strong>un</strong>a <strong>di</strong>scriminante tra la vit<strong>to</strong>ria e la sconfitta <strong>di</strong> <strong>un</strong>a partita.<br />

Ogni collisione è tipicamente composta da due fasi:“Detection” e “Response”.<br />

La prima fase si occupa <strong>di</strong> testare la presenza <strong>di</strong> eventuali collisioni tra i<br />

<strong>di</strong>versi oggetti che compongono la scena 3D, mentre la seconda si occupa <strong>di</strong><br />

calcolare la risposta, in termini <strong>di</strong> movimen<strong>to</strong> e rotazione, che tali oggetti<br />

devono compiere a segui<strong>to</strong> <strong>di</strong> <strong>un</strong>a collisione.<br />

La “Collision Detection” solitamente opera <strong>su</strong> <strong>un</strong>’approssimazione <strong>di</strong> quelli<br />

che sono i volumi occupati dalla geometria degli oggetti 3D, e solo raramente<br />

<strong>di</strong>rettamente <strong>su</strong>lla geometria poligonale dei singoli modelli.<br />

Tra le approssimazioni più com<strong>un</strong>i vi sono le collisioni “Sphere-Sphere”,“Sphere-<br />

Box” e “Box-Box”.<br />

La “Sphere-Sphere” è tendenzialmente la meno precisa ma anche la più semplice<br />

da realizzare e computazionalmente meno cos<strong>to</strong>sa. È implementata me<strong>di</strong>ante<br />

<strong>un</strong> test <strong>su</strong>lla <strong>di</strong>stanza tri<strong>di</strong>mensionale tra i due oggetti (Figura 2.23).<br />

“Sphere-Box”, invece, prevede <strong>un</strong> test <strong>di</strong> intersezione tra <strong>un</strong>a sfera ed <strong>un</strong><br />

“Bo<strong>un</strong><strong>di</strong>ngBox”, cioè <strong>un</strong>’approssimazione del volume del modello tri<strong>di</strong>mensionale<br />

in <strong>un</strong> parallelepipedo, calcola<strong>to</strong> in base ai vertici estremi del modello<br />

stesso per ogni asse. Se il test viene esegui<strong>to</strong> <strong>su</strong> <strong>un</strong> “Axis-Aligned Bo<strong>un</strong><strong>di</strong>ng<br />

Box” (AABB, ovvero <strong>un</strong> Bo<strong>un</strong><strong>di</strong>ngBox non orienta<strong>to</strong>) continua ad essere poco<br />

cos<strong>to</strong>so e <strong>di</strong> semplice implementazione (Figura 2.24).

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

Saved successfully!

Ooh no, something went wrong!