J'essaie de faire (comprendre comment ..) Un stratifil 2D à XNA. P>
Je sais comment créer une grille de tuile et comment effectuer une détection de collision. J'effectue une détection de collision sur les 9 carreaux de liaison du joueur, mais j'aimerais savoir s'il y a un meilleur moyen d'effectuer une détection de collision. P>
J'ai lu Braid n'utilise pas de carreaux mais d'images reconstituées ou de quelque chose, comment accomplissez-vous la détection de collision sur ceux-ci? et est-ce mieux que d'utiliser des tuiles? P>
4 Réponses :
En supposant que cela ne vous dérange pas d'utiliser un outil tiers pour faire la majorité du travail pour vous, vous pouvez être mieux en train d'utiliser quelque chose comme Box2D pour C #. P>
http://www.box2d.org/ http://code.google.com/p/box2dx/ p>
Cette bibliothèque vous donnera des capacités de détection de collision et de physique. P>
L'utilisation d'une bibliothèque de physique pour une simple détection de collision pour votre personnage principal dans un jeu de plate-forme est généralement une mauvaise idée. Il faut un effort énorme pour le modifier et faire le mouvement et le sentir bien. Les 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 raison de la gravité) C'est juste qu'il est programmé de se sentir juste, au lieu de corriger physiquement.
La physique BOX2D et FARSEER, comme mentionné ci-dessous, sont des API de physique extrêmement simples. En fait, ils sont si simples que je dirais que la mise en place d'un monde physiquement basé avec eux impliquerait moins de lignes de code que de rouler votre propre détection de collision. Même pour un simple plateforme 2D.
Le problème de la physique (à nouveau) est qu'il faut qu'il faut bien. Tout est possible, ce qui est amusant pour certains jeux, mais vous ne voulez généralement pas que le personnage principal puisse pouvoir interagir et utiliser tout. Les jeux basés sur la physique deviennent rapidement des jeux de style de simulation, tandis que les jeux PlqtForm sont beaucoup plus de jeux de style arcade directs. Cela ne signifie pas qu'ils utilisent des objets de physique pour certains éléments, mais il ne signifie pas très certainement que tout est simulé.
C'est vrai, et une personne que je sais, qui mettait ensemble une plate-forme de Farseer devait faire un peu de chaussures du moteur pour obtenir un comportement raisonnable. Cela a fonctionné, mais cela prend beaucoup de temps.
@Reinier et RCix Quoi de mieux à utiliser? Un moteur de physique ou une collision de tuiles? Et qu'est-ce que les plateficheurs sont maintenant un jour comme «nouveau Super Mario Bros. Wii», par exemple, utiliser? Je sais que les anciens plateformes utilisaient la collision de carreaux d'occasion?
@RESTART: Si vous êtes un débutant, commencez simplement avec la collision de tuiles. Voyez jusqu'où ça va vous obtenir. Tout avant la 3D est devenu une collision basée sur les tuiles «simple» utilisée. (Alors des jeux comme Turrican, l'ancien Mario, Superfrog, etc.). Donc, vous pouvez avoir un long chemin.
Ok je prévoyai de faire un jeu de tuiles, mais quand j'ai découvert, il y avait d'autres moyens de faire un plateforme, je ne savais plus quoi utiliser. Je continuerai à construire mon jeu de carreaux maintenant, bien que je sois toujours curieux, quelle tresse utilisée si ce n'était pas un jeu de tuiles.
@RESTART: Au lieu de faire des carreaux dans une grille régulière, vous pouvez utiliser des "carreaux" qui sont positionnés n'importe où (ils ont donc essentiellement un X, Y POS). La collision sera plus difficile car ce n'est plus basé sur la grille. Vous aurez besoin de savoir (de manière rapide) quels graphiques vous êtes debout. Une façon de faire est d'utiliser un autre schéma de subdivision spatiale comme un quadtree en.wikipedia.org/wiki/quadtree < / a> Vous aurez également besoin de cela pour déterminer rapidement les «tuiles» à blimer à l'écran (quelque chose qui est également beaucoup plus facile lorsque vous utilisez une grille).
@RESTART: Il est facile de se perdre dans toutes les options. C'est pourquoi il est recommandable de commencer simplement «facile» et d'utiliser un tilap. Au moment où votre premier jeu a fini, vous aurez beaucoup d'expérience pour passer à d'autres schémas.
Avez-vous vérifié les exemples de la série de collision sur le club de créateurs XNA, en particulier le Pixel-collision échantillon? P>
Avec un jeu de plate-forme, vous ne voulez vraiment pas de détection de collision parfaite pixel. Cela voudrait dire que si le personnage principal anime, cela parfois (à cause de sa main qui sort par exemple), il se heurte à un mur, puis il anime à nouveau, et il peut encore marcher sur 2 pixels. Ce que vous faites normalement, c'est de définir quelques boîtes de collision, soit une forme élipité invisible autour du caractère et utilisez-la comme votre zone de collision.
@Reinier: J'ai écrit des jeux de plate-forme 2D où la collision entre héros et carreaux n'était pas parfaite, mais la collision entre objets (comme des balles) et les carreaux étaient parfaitement parfaits et entre objets et héros étaient parfaitement parfaits. Donc, il peut être plus complexe que "pas de pixel parfaite collision". :)
@WizardODDS: Cela peut clairement être un choix. J'aime moi-même mieux si un jeu est légèrement pardonnant. Mon personnage principal n'est donc pas instantanément mort si sa narine gauche arrive à entrer en collision avec le ongle de l'ennemi. Bien que les ordinateurs puissent être parfaitement parfaits, la vision des joueurs n'est généralement pas ... c'est pourquoi vous permettez généralement de vous chevaucher des sprites.
Si vous allez pour un style rétro, c'est certainement bien d'utiliser des carreaux! Cependant, si vous voulez quelque chose de plus "moderne", vous pouvez utiliser un moteur de physique plus conventionnel. FARSERER Physics est un grand moteur et plusieurs personnes l'ont utilisé pour faire des plateformeurs. Il est basé sur Box2D et des moteurs similaires, mais offre une API plus simple et plusieurs caractéristiques uniques (telles que la texture à la géométrie) et moi-même pouvons témoigner de sa gentillesse ayant joué un peu. P>
Vous avez probablement besoin d'un peu plus que la détection de collision pour un jeu comme la tresse. Je suppose que vous avez également besoin d'un moteur de physique. Je vous recommanderais de jeter un coup d'œil à Moteur de physique FARSEER , qui est un moteur 2D très bien avec XNA . Il prend en charge un certain nombre de techniques différentes pour la détection de collision. p>
Merci, je vais jeter un coup d'œil à Farseer.
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 geômes au travail. J'ai créé une physique, 2 corps, 2 geômes et maintenant 1 chutes corporelles en raison de la gravité. problème est qu'il tombe tout droit dans l'autre corps.
@Restart: Avez-vous regardé toutes les démonstrations? Il y a beaucoup d'exemples de détection de collision.