2010-02-09 8 views
7

J'essaie de faire (comprendre comment ..) un jeu de plateforme 2D dans XNA.XNA C# Plate-forme 2D Game

Je sais comment créer une grille de tuiles et comment effectuer une détection de collision. J'effectue une détection de collision sur les 9 tuiles de délimitation du lecteur, mais j'aimerais savoir s'il existe une meilleure façon d'effectuer une détection de collision. J'ai lu Braid n'utilise pas de mosaïques mais des images assemblées ou quelque chose, comment procédez-vous à la détection de collision? et est-ce mieux que d'utiliser des carreaux?

Répondre

3

En supposant que cela ne vous dérange pas d'utiliser un outil tiers pour faire la majorité du travail pour vous, vous feriez peut-être mieux d'utiliser quelque chose comme Box2D pour C#.

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

Cette bibliothèque vous donnera des capacités de détection de collision et la physique.

+5

en utilisant une bibliothèque de physique pour la détection de collision simple pour votre personnage principal dans un jeu de plate-forme est généralement une mauvaise idée. Il faut un énorme effort pour l'ajuster et en faire le mouvement et le toucher. Des jeux comme Mario ne sont pas physiquement corrects, et sont donc beaucoup plus agréables à jouer. Cela ne signifie pas qu'il semble se comporter et se conformer à certaines règles (comme le personnage principal tombe en panne à cause de la gravité) c'est juste qu'il est programmé pour se sentir juste, au lieu d'être physiquement correct. – Toad

+0

Box2D et Farseer Physics, comme mentionné ci-dessous, sont des API de physique extrêmement simples. En fait, ils sont si simples, je dirais que la mise en place d'un monde physique avec eux impliquerait moins de lignes de code que de lancer votre propre détection de collision. Même pour un simple jeu de plateforme 2d. – xgalaxy

+2

le problème avec la physique (encore une fois) est que cela prend du temps pour bien faire les choses. Tout est possible, ce qui est amusant pour certains jeux, mais généralement vous ne voulez pas que le personnage principal puisse interagir et utiliser tout. Jeux basés sur la physique deviennent rapidement trier des jeux de style de simulation, tandis que les jeux plqtform sont des jeux de style arcade beaucoup plus directs. Cela ne signifie pas qu'ils utilisent des éléments physiques pour certains éléments, mais cela ne signifie absolument pas que tout est simulé. – Toad

0

Avez-vous vérifié les exemples dans la série de collision sur le club des créateurs XNA, en particulier l'échantillon pixel-collision?

+3

Avec un jeu de plateforme, vous ne voulez vraiment pas de détection de collision parfaite. Cela voudrait dire que si le personnage principal s'anime, que parfois (en raison de sa main qui sort par exemple) il se heurte à un mur, puis il s'anime de nouveau, et il peut encore marcher 2 pixels. Ce que vous faites normalement est de définir soit quelques boîtes de collision, ou une forme ellipsoïde invisible autour du personnage et l'utiliser comme zone de collision. – Toad

+0

@reinier: J'ai écrit des jeux de plate-forme 2D où la collision entre héros et tuiles n'était pas parfaite mais la collision entre objets (comme les balles) et les tuiles était parfaite et entre les objets et les héros aussi. Donc, il peut être plus complexe que "pas de collision parfaite pixel". :) – SyntaxT3rr0r

+0

@reinier: bon point, je suis d'accord. –

1

Si vous optez pour un style rétro, il est bon d'utiliser des carreaux! Cependant, si vous voulez quelque chose de plus «moderne», alors vous pouvez aller avec un moteur physique plus conventionnel. Farseer Physics est un excellent moteur, et plusieurs personnes l'ont utilisé pour faire des platformers. Il est basé sur Box2D et des moteurs similaires, mais offre une API plus simple et plusieurs caractéristiques uniques (comme la texture à la géométrie) et moi-même pouvons témoigner de sa gentillesse après avoir joué avec un peu.

1

Vous avez probablement besoin d'un peu plus que la détection de collision pour un jeu comme Braid. Je suppose que vous avez aussi besoin d'un moteur physique. Je vous recommande de jeter un oeil à Farseer Physics engine, qui est un moteur 2D qui fonctionne très bien avec XNA. Il prend en charge un certain nombre de techniques différentes pour la détection de collision.

+0

Merci, je vais jeter un oeil à farseer. – Restart

+0

J'ai regardé farseer maintenant, des échantillons qu'il a l'air gooed mais je ne peux pas obtenir la détection de collision entre 2 geoms pour fonctionner. J'ai créé un simulateur de physique, 2 Bodys, 2 Geoms, et maintenant 1 corps tombe à cause de la gravité. le problème est qu'il tombe directement à travers l'autre corps. – Restart

+0

@Restart: Avez-vous regardé toutes les démos? Il existe de nombreux exemples de détection de collision. –