Quel est le meilleur moyen de détecter les collisions dans les sprites d'un jeu 2D? Je travaille actuellement dans allegro et G ++Meilleure façon de détecter une collision entre les sprites?
Répondre
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.
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 ...
Peut-être que modifier votre question pour refléter cela? et c'est le titre? – mmcdole
ouais merci beaucoup l'homme! –
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.
hey merci pour collegro, je travaille actuellement dans allegro –
@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
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. –
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.
"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. –
Utilisez une bibliothèque, je recommande Box2D
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.
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.
- 1. Meilleure façon d'animer les sprites en Flex
- 2. meilleure façon de détecter statistiquement les anomalies dans les données
- 3. Détecter un point de collision entre un maillage et une sphère?
- 4. Quelle est la meilleure façon de lire une feuille de sprites en Java?
- 5. De quelle manière présenteriez-vous un algorithme pour détecter les collisions entre différents objets?
- 6. XLinq - Une meilleure façon
- 7. Quelle est la meilleure façon de gérer les sprites tournants pour un jeu de vue de haut en bas
- 8. La meilleure façon de détecter quand un utilisateur quitte une page Web?
- 9. redimensionnement de vecteur - façon portable de détecter
- 10. Quelle est la meilleure façon de gérer les dépendances circulaires entre les objets?
- 11. Meilleure façon de suivre les pages vues
- 12. Meilleure façon d'afficher les erreurs de saisie
- 13. Meilleure façon de gérer les messages d'erreur
- 14. Meilleure façon d'annoter les chaînes de fournisseur
- 15. Quelle est la meilleure façon de stocker l'ordre entre les lignes de la base de données?
- 16. Meilleure façon de stocker les critères Badge?
- 17. Meilleure façon de gérer une exception KeyNotFoundException
- 18. F #: Meilleure façon de démultiplier une API?
- 19. Une meilleure façon de concevoir cette boucle?
- 20. Meilleure façon de contrôler les paniers
- 21. Meilleure façon de partager/gérer notre bibliothèque interne de pythons entre les applications
- 22. Quelle est la meilleure façon de définir les dépendances entre plusieurs fichiers de construction ant?
- 23. PHP: La meilleure façon d'extraire le texte entre parenthèses?
- 24. Meilleure façon de basculer la configuration entre les environnements de développement/UAT/Prod dans ASP.NET?
- 25. Meilleure façon de skinner le lecteur flash
- 26. Meilleure façon de partager des données entre une instance d'application .NET?
- 27. Meilleure façon d'appeler une méthode d'instance dans les arbres d'expression?
- 28. Meilleure façon de basculer entre plusieurs versions du lecteur Flash pour faciliter les tests?
- 29. Meilleure façon de partager l'iphone et le code mac entre les projets
- 30. Meilleure façon de redémarrer une instance de jetée
Cette question concerne les sprites. –