2010-02-09 9 views
7

Sto cercando di fare (capire come ..) un platform 2d in XNA.XNA C# 2D Platformer Game

So come creare una griglia di tessere e come eseguire il rilevamento di collisioni. Eseguo il rilevamento delle collisioni sulle 9 tessere di delimitazione del lettore, ma mi piacerebbe sapere se esiste un modo migliore per eseguire il rilevamento delle collisioni.

Ho letto Braid non usa le tessere ma le immagini collegate o qualcosa del genere, come si esegue il rilevamento delle collisioni su quelle? ed è meglio che usare le tessere?

risposta

3

Supponendo che non ti dispiaccia usare uno strumento di terze parti per fare la maggior parte del lavoro per te, potresti stare meglio usando qualcosa come Box2D per C#.

http://www.box2d.org/ http://code.google.com/p/box2dx/

Questa libreria vi darà capacità di rilevamento di collisione e fisica.

+5

utilizzando una libreria fisica per il rilevamento di collisioni semplice per il personaggio principale in un gioco di piattaforma è generalmente una cattiva idea. Ci vuole un enorme sforzo per modificarlo e rendere il movimento e la sensazione giusta. Giochi come Mario non sono fisicamente corretti e quindi sono molto più divertenti da giocare. Ciò non significa che sembra comportarsi e rispettare alcune regole (come il personaggio principale che cade a causa della gravità), è solo che è programmato per sentirsi giusto, invece che fisicamente corretto. – Toad

+0

Box2D e Farseer Physics, come indicato di seguito, sono API di fisica estremamente semplici. In effetti sono così semplici che direi che impostare un mondo basato su di loro fisicamente implicherebbe meno linee di codice rispetto al rotolamento del proprio rilevamento di collisione. Anche per un semplice platform 2d. – xgalaxy

+2

il problema con la fisica (di nuovo) è che richiede tempo per andare bene. Tutto è possibile, il che è divertente per alcuni giochi, ma in genere non si desidera che il personaggio principale sia in grado di interagire e utilizzare tutto. I giochi basati sulla fisica si trasformano rapidamente in giochi di simulazione, mentre i giochi plqtform sono giochi in stile arcade molto più diretti. Non significa che usano le cose della fisica per determinati elementi, ma in definitiva non significa che tutto sia simulato. – Toad

0

Hai controllato gli esempi nella serie di collisioni sul club dei creatori di XNA, in particolare il campione pixel-collision?

+3

Con un gioco di piattaforma non vuoi davvero il rilevamento perfetto delle collisioni con pixel. Significherebbe che se il personaggio principale si anima, a volte (a causa della sua mano che sporge), si imbatte in un muro, e poi si anima di nuovo, e può ancora camminare 2 pixel. Quello che fai normalmente è definire alcune caselle di collisione o una forma di elissoide invisibile attorno al personaggio e usarla come area di collisione. – Toad

+0

@reinier: Ho scritto giochi di piattaforma 2D in cui la collisione tra eroe e tessere non era perfetta come pixel ma la collisione tra oggetti (come le palle) e le tessere erano pixel perfetti e tra oggetti ed eroe anche i pixel erano perfetti. Quindi potrebbe essere più complesso di "nessuna collisione perfetta di pixel". :) – SyntaxT3rr0r

+0

@reinier: buon punto, sono d'accordo. –

1

Se stai cercando uno stile retrò, è sicuramente meglio usare le tessere! Tuttavia, se vuoi qualcosa di più "moderno", allora puoi andare con un motore fisico più convenzionale. Farseer Physics è un ottimo motore e molte persone lo hanno utilizzato per creare piattaforme. Si basa su Box2D e motori simili, ma offre un'API più semplice e diverse caratteristiche uniche (come la trama alla geometria) e io stesso posso testimoniare che è stata la gentilezza a giocarci un po '.

1

Probabilmente hai bisogno di un po 'di più del rilevamento delle collisioni per un gioco come Braid. Suppongo che tu abbia anche bisogno di un motore fisico. Ti consiglio di dare un'occhiata a Farseer Physics engine, che è un motore 2D che funziona molto bene con XNA. Supporta un numero di diverse tecniche per il rilevamento delle collisioni.

+0

Grazie, darò un'occhiata al navigatore. – Restart

+0

Ora guardo più lontano, dai campioni che ha sembra emerso ma non riesco a far funzionare il rilevamento delle collisioni tra 2 geomi. Ho creato un PhysicsSimulator, 2 Bodys, 2 Geoms, e ora 1 corpo cade a causa della gravità. il problema è che cade dritto attraverso l'altro corpo. – Restart

+0

@Restart: hai guardato tutte le demo? Ci sono molti esempi sul rilevamento delle collisioni. –