Meilleure façon de détecter la collision entre les sprites?
Quel est le meilleur moyen de détecter les collisions dans un jeu en 2d sprites? Je suis actuellement en train de travailler dans l'allegro et G++
Cette question est maintenant au sujet de sprites.
OriginalL'auteur Abhishek Mishra | 2008-09-19
Vous devez vous connecter pour publier un commentaire.
Il existe une pléthore de méthodes de détection, la détection de collision. Les méthodes que vous utilisez sera légèrement modifié si, selon si votre utilisation d'un 2d ou 3d de l'environnement. Rappelez-vous aussi lors de l'instauration d'un système de détection de collision, afin de prendre en compte la physique, vous pouvez implémenter dans le jeu (ce qui est nécessaire pour la plupart de la descente des jeux en 3d) afin d'améliorer la réalité.
La version courte est d'utiliser des boîtes englobantes. Ou en d'autres termes, faire de chaque entité dans le monde de la boîte, puis vérifier si chacun des axes de la boîte sont entrés en collision avec d'autres entités.
Avec de grandes quantités d'entités de test pour les collisions, vous voudrez peut-être vérifier dans un octree. Vous serait simple de diviser le monde en secteurs, puis seulement vérifier les collisions entre les objets dans les mêmes secteurs.
Pour plus de ressources, vous pouvez aller sur le site de sourceforge et de recherche pour la Balle de la dynamique du moteur qui est de l'open source de détection de collision et le moteur physique, ou vous pouvez vérifier http://www.gamedev.net qui a beaucoup de ressources sur copieuses jeu les questions de développement.
OriginalL'auteur cs_student
Tout bon graphismes en 2D de la bibliothèque devra fournir ses propres fonctions de détection de collision pour tout, de la aligné les sprites de polygones pour les pixels, ou avoir une ou plusieurs bonnes bibliothèques tierces pour accomplir ces fonctions. Votre choix de moteur/bibliothèque/cadre doit dicter votre détection de collision des choix, car ils sont probablement beaucoup plus optimisé que ce que vous pourriez produire seul.
Pour Allegro est Collegro. Pour la SDL il y a SDL_Collide.h ou SDL-Collision. Vous pouvez utiliser I_COLLIDE avec OpenGL. DarkBASIC a construit dans le système de collision, et DarkPhysics très précise des interactions, y compris les collisions.
Mishra vous pouvez ajouter à votre question, peut-être quelqu'un d'autre connaît une autre bonne solution pour vous.
Le Collegro url ne fonctionne pas, mais vous pouvez trouver un thread à ce sujet ici: allegro.cc/forums/thread/550371 Également utilisé pour l'Allegro, il est PPCol.
OriginalL'auteur Sparr
Utiliser une bibliothèque, je recommande Box2D
OriginalL'auteur Niall
Cette question est assez générale. Il existe de nombreuses façons d'aller sur la détection de collision dans un jeu en 2d. Il serait utile de savoir ce que vous essayez de faire.
Comme un point de départ bien que, il ya assez simple des méthodes qui permettent de détection entre les cercles, rectangles, etc. Je ne suis pas un grand fan de gamedev.net mais il ya quelques bonnes ressources au sujet de ce type de détection. Un tel article est ici. Il couvre une partie du matériel de base qui pourraient vous aider à obtenir commencé.
De base 2d jeux pouvez utiliser des rectangles ou des cercles à "enfermer" un objet sur l'écran. Détection de lorsque les rectangles se chevauchent ou quand les cercles se chevauchent est assez simple de faire des mathématiques. Si vous avez besoin de quelque chose de plus compliqué (comme convexe artibrary polys), puis la solution est plus compliquée. Encore une fois, gamedev.net peut-être d'un peu d'aide ici.
Mais vraiment pour répondre à votre question, nous avons besoin de savoir ce que vous essayez de faire? Ce type de jeu? Quels types d'objets sont que vous essayez d'entrer en collision? Êtes-vous essayer d'entrer en collision avec écran frontières, etc.
OriginalL'auteur Mark
Mise en œuvre d'un système de détection de collision est une question compliquée, mais que vous souhaitez prendre trois points.
Monde des objets. Partitionnement De L'Espace.
Si vous faites une collision vérifier à chaque sprite 2d dans votre monde contre tout le reste, vous aurez un lent lent programme! Vous avez besoin d'établir des priorités. Vous avez besoin de la partition de l'espace. Vous pouvez utiliser une grille orthogonale système et la tranche de votre monde dans une grille 2d. Ou vous pouvez utiliser un arbre BSP, à l'aide de lignes que l'élément de séparation de la fonction.
Large de la phase de détection de collision
Il utilise de délimitation des volumes tels que des cylindres ou des points de suspension (selon ce qui se rapproche de la forme de vos sprites le meilleur) pour déterminer si les objets sont intéressant de comparer plus en détail. Les mathématiques c'est facile. Apprendre votre 2d matrice de transformations. Et pour la 2d intersection, vous pouvez même utiliser de haute puissance, les cartes vidéo à faire beaucoup de travail!
Étroit de la phase de détection de collision
Maintenant que vous avez établi que deux ou plusieurs objets sont intéressant de comparer, vous entrez dans votre amende à l'écoute de la section. L'objectif de cette phase est de déterminer la collision résultat. Profondeur de pénétration, volume englobé, etc... Et cette information sera alimenté dans n'importe quel moteur physique de prévu. En 3d c'est le domaine de GJK distance algs et d'autres neato algorithmes que nous aimons tous tellement!
Vous pouvez mettre en place tout cela de façon générique et spécifier le large et l'étroit résolutions polymorphically, ou de fournir un crochet si vous travaillez dans un langage de plus bas niveau.
OriginalL'auteur
Collisions entre quoi? Cela dépend si vous utiliser des sprites, des polygones concaves, convexes polygones, rectangles, des carrés, des cercles, des points...
OriginalL'auteur Thomas
La vérification de collision entre deux balles dans la 2D est facile. Vous pouvez google, mais, fondamentalement, vous vérifiez si la longueur des deux boules de rayon combiné est plus grande ou égale à la distance entre le centre des deux boules.
Ensuite, vous pouvez trouver le point de collision en prenant le vecteur unitaire entre le centre de boules et de le multiplier avec l'une des boules de rayon.
OriginalL'auteur Adam Smith