2008-09-19 13 views

Répondre

3

Il y a une pléthore de moyens pour détecter la détection de collision. Les méthodes que vous utiliserez seront légèrement modifiées si vous utilisez un environnement 2D ou 3D. Rappelez-vous également lors de la mise en place d'un système de détection de collision, de prendre en compte toute la physique que vous souhaitez mettre en œuvre dans le jeu (nécessaire pour la plupart des jeux 3D de descente) afin d'améliorer la réalité.

La version courte est d'utiliser des boîtes de délimitation. Ou, en d'autres termes, faites de chaque entité dans le monde une case, puis vérifiez si chacune des axis de la boîte est en collision avec d'autres entités.

Avec de grandes quantités d'entités à tester pour les collisions, vous pouvez vérifier dans un octree. Vous pouvez simplement diviser le monde en secteurs, puis vérifier seulement la collision entre les objets dans les mêmes secteurs. Pour plus de ressources, vous pouvez aller à sourceforge et rechercher le moteur Bullet dynamique qui est un moteur open source de détection de collision et de physique, ou vous pouvez consulter http://www.gamedev.net qui a beaucoup de ressources sur de nombreux sujets de développement de jeux.

0

Collisions entre quoi? Cela dépend si vous utilisez des sprites, des polygones concaves, des polygones convexes, des rectangles, des carrés, des cercles, des points ...

+0

Peut-être que modifier votre question pour refléter cela? et c'est le titre? – mmcdole

+0

ouais merci beaucoup l'homme! –

4

Toute bibliothèque graphique 2D décente fournira ses propres fonctions de détection de collision pour tout, des sprites alignés aux polygones en pixels, ou avoir une ou plusieurs bonnes bibliothèques tierces pour effectuer ces fonctions. Votre choix de moteur/bibliothèque/cadre devrait dicter vos choix de détection de collision, car ils sont probablement beaucoup plus optimisés que ce que vous pourriez produire seul.

Pour Allegro, il y a Collegro. Pour SDL, il y a SDL_Collide.h ou SDL-Collide. Vous pouvez utiliser I_COLLIDE avec OpenGL. DarkBASIC a un système de collision intégré, et DarkPhysics pour des interactions très précises, y compris les collisions.

+0

hey merci pour collegro, je travaille actuellement dans allegro –

+0

@Ahhishek Mishra vous voudrez peut-être ajouter à votre question, peut-être quelqu'un d'autre connaît une autre solution agréable pour vous. – Huppie

+0

Le Collegro url ne fonctionne pas, mais vous pouvez trouver un fil à ce sujet ici: http://www.allegro.cc/forums/thread/550371 Également utilisé pour Allegro il ya PPCol. –

1

Cette question est assez générale. Il y a plusieurs façons de procéder à la détection de collision dans une partie 2d. Cela aiderait à savoir ce que vous essayez de faire. Par contre, il existe des méthodes assez simples qui permettent la détection entre les cercles, les rectangles, etc. Je ne suis pas un grand fan de gamedev.net, mais il y a de bonnes ressources sur ce type de détection . Un tel article est here. Il couvre un certain matériel de base qui pourrait vous aider à démarrer.

Les jeux de base 2D peuvent utiliser des rectangles ou des cercles pour "entourer" un objet sur l'écran. La détection du chevauchement des rectangles ou du chevauchement des cercles est assez mathématique. Si vous avez besoin de quelque chose de plus compliqué (comme des polys artibrary convexes), alors la solution est plus compliquée. Encore une fois, gamedev.net pourrait être utile ici.

Mais vraiment pour répondre à votre question, nous devons savoir ce que vous essayez de faire? Quel type de jeu? Quel type d'objets essayez-vous d'entrer en collision? Essayez-vous d'entrer en collision avec les limites de l'écran, etc.

+0

"Je ne suis pas un grand fan de gamedev.net" Je n'utilise généralement pas leurs tutoriels moi-même. Cependant, les forums sont très actifs, vous pouvez donc rechercher dans les forums des références à de bons endroits pour trouver des tutoriels (en dehors de gamedev), ainsi que des questions spécifiques. J'essayais davantage de le guider dans une bonne direction. –

2

Utilisez une bibliothèque, je recommande Box2D

0

La vérification de la collision entre deux billes en 2D est facile. Vous pouvez le google mais en gros vous vérifiez si la longueur du rayon de deux balles combinées est plus grande ou égale à la distance entre le centre des deux balles.

Ensuite, vous pouvez trouver le point de collision en prenant le vecteur unitaire entre le centre des balles et le multiplier avec l'un des rayons des billes.

1

La mise en œuvre d'un système de détection de collision est compliquée, mais vous devez considérer trois points.

  • Monde d'objets. Partitionnement de l'espace. Si vous faites une vérification de collision contre chaque sprite 2d dans votre monde contre tout le reste, vous aurez un programme lent lent! Vous devez prioriser. Vous devez partitionner l'espace. Vous pouvez utiliser un système de quadrillage orthogonal et découper votre monde en une grille 2D. Ou vous pouvez utiliser une arborescence BSP en utilisant des lignes comme fonction de séparation. Cette méthode utilise des volumes englobants tels que des cylindres ou des ellipses (selon la forme la plus proche de la forme de vos sprites) pour déterminer si les objets valent ou non une comparaison plus détaillée. Le calcul pour cela est facile. Apprenez vos transformations matricielles 2D. Et pour l'intersection 2d, vous pouvez même utiliser des cartes vidéo puissantes pour faire beaucoup de travail!

  • Détection de collision à phase étroite Maintenant que vous avez déterminé que deux ou plusieurs objets valent la peine d'être comparés, vous entrez dans votre section affinée. Le but de cette phase est de déterminer le résultat de la collision. Profondeur de pénétration, volume englobé, etc ... Et cette information sera introduite dans n'importe quel moteur de physique que vous avez planifié. En 3d, c'est le royaume des algorithmes de distance de GJK et d'autres algorithmes de neato que nous aimons tous tellement!

Vous pouvez mettre en œuvre tout cela génériquement et préciser les résolutions larges et étroites polymorphically, ou fournir un crochet si vous travaillez dans une langue de niveau inférieur.

Questions connexes