2D-Rechteck Kollision-Detektion-system (das klappt in einem realen Spiel)
Ich habe ein Spiel zu entwickeln, in meiner Freizeit für die letzten Monate. Ein Knackpunkt, dass ich reimplementiert über und über und haben nicht 100% funktioniert, ist die Kollisionserkennung. Mein system (unten geschrieben) funktioniert auch meistens aber zufällige Dinge scheinen zu geschehen, von Zeit zu Zeit, wie die Spieler geschoben, die außerhalb der Grenzen der level etc. Tutorials auf die Frage, die ich habe über kommen scheinen grundlegende arbeiten, ich.e, die Sie haben, um zu wissen, dass ein Objekt in Bezug auf das Objekt in Frage, aber in einem echten Spiel würde man nicht wirklich wissen. Hier ist meine Umsetzung, sondern das, was ich am nach ist, wenn jemand weiß, eine gute und solide system-für das erreichen, was ich hier mache.
Beachten Sie, dass Artikel kommt aus einer Sammlung von IItem, welche macht Sie das Rechteck und ein paar andere bits für jedes Element.
public void Move(float xAdditional, float yAdditional)
{
X += xAdditional;
Y += yAdditional;
foreach (var item in Level.Items)
{
if (item != this)
{
if (item.Boundary.Intersects(this.Boundary))
{
if (item.Boundary.Top > this.Boundary.Top) //we have collided with an object below us.
{
Y = item.Boundary.Top - (this.Boundary.Height/2);
}
if(item.Boundary.Bottom < this.Boundary.Bottom)//we have collided with an object above us.
{
Y = item.Boundary.Bottom + (this.Boundary.Height/2);
}
if(item.Boundary.Left > this.Boundary.Left) //We have collided with an object to the right.
{
X = item.Boundary.Left - (this.Boundary.Width/2);
}
if(item.Boundary.Right < this.Boundary.Right)//We have collided with an object to the left;
{
X = item.Boundary.Right + (this.Boundary.Width/2);
}
}
}
}
}
Dank der Empyrean, Nach einigen ernsthaften Lesen des tutorials bin ich dabei zu sitzen und zu lernen, mit Farseer, basierend auf Box2D ich verstehen, denke ich. Es scheint zu sein, die am besten geeignet sind, wie ich arbeiten möchte, mit den Dingen. Gesehen zu haben, es in Aktion zu sein ein bisschen ein Klacks.
InformationsquelleAutor Nick | 2011-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die endgültige Lösung war, meine drop-eigenen Lösung und implementieren Farseer.
Dank
Nach einiger Zeit ich mich dann entschieden für physics2d.net was ich gefunden habe, viel mehr nutzbare aus der Sicht eines Entwicklers.
InformationsquelleAutor Nick
Zunächst Kollisionserkennung hängt stark von der Objekt-geometrie.
Es gibt mehrere bewährte Arbeit Lösungen werfen in die lineare algebra Mathematik,
aber Sie sind angewiesen auf die Geometrien, die Sie versuchen, zu verwenden. Statt
die Implementierung eines Algorithmus, der mit Ihrem Objekt Eigenschaften umzusetzen versuchen eine mathematische Gleichung direkt und verwenden Sie dann das Ergebnis, um zu bestimmen, wenn Ihre Kollision stattgefunden hat oder nicht. (wie die Verwendung von Vektoren t = a-b, falls |t|>0 Kollision, sonst nicht).
Wenn Sie eine einfache geometrie wie Rechtecke oder Kreise sollten Sie einen
Blick in 'Mathematics for 3d game programming & computer graphics von Eric
Lengyel.
Beachten Sie auch, dass Sie erreichen können, collision detection mit anderen Methoden
wie die sprite-Kollision. Eine andere Möglichkeit ist die Verwendung von einer höheren Ebene Rahmen
macht diese Arbeit für Sie (z.B. OSG)
InformationsquelleAutor count0