2010-04-11 5 views
2

Je travaille avec xna en C# et dans mon jeu, je vais avoir une variété de vaisseaux spatiaux volant partout. Ils auront chacun une rotation, une taille et une position arbitraires dans l'espace et j'ai besoin d'une méthode pour déterminer quand ils entrent en collision. Idéalement, la méthode prend deux Rectangles, deux doubles et deux Vector2 pour la taille, la rotation et la position respectivement et renvoie un booléen qui indique s'ils ont intersecté ou non.Détection de collision pour des rectangles de taille arbitraire, positionnés et pivotés dans XNA

+0

Vous nous demandez d'écrire une méthode pour vous ou en avez-vous déjà une? –

+0

Je cherche quoi que ce soit. Si vous pouvez écrire une méthode pour moi, ce serait génial, mais des algorithmes ou des concepts seraient utiles aussi. – Stefan

Répondre

3

Jetez un oeil à ces liens:

Collision Detection Overview
Collision Detection Matrices
Putting Collision Detection Into Practice

Ils vous montrent une façon de faire la détection de collision à base de pixels, ce qui est plus précis que sur la base de rectangle pour des objets de forme irrégulière .

+0

@kyralessa: vous ne voulez presque jamais faire des collisions pixel parfait dans les jeux. Par exemple, il fait un jeu avec des fusées. Avec une collision parfaite pixel, cela signifierait que si 1 pixel de l'aile d'une fusée toucherait 1 pixel de la pointe de son vaisseau spatial, il exploserait. Habituellement, vous définissez une zone de collision pour être une région beaucoup plus petite à l'intérieur des objets. Cela semble beaucoup mieux. – Toad

1

Ces rectangles vous décrirai sont appelés OBB (boîtes englobantes Oriented)

La façon de faire des collisions entre eux utilise le « la séparation théorème de l'axe »

Une page très agréable qui décrit en détail avec beaucoup de les images peuvent être trouvées here

+0

Ils ne sont pas alignés s'ils sont pivotés. –

+0

Vous avez raison, bien sûr. Je voulais dire OBB. La théorie représente encore ceux-là aussi; ^) – Toad

2

Vous pouvez également envisager simplement en utilisant une solution de la boîte pour cela et intégrer quelque chose comme la physique Farseer moteur:
http://farseerphysics.codeplex.com/

Questions connexes