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);
                    }
                }
            }

        }


    }
Zuverlässige Kollisions-Reaktion ist ein wirklich, wirklich schwieriges problem zu bekommen direkt selbst. Sie sind fast immer besser, mit einer Lösung umgesetzt, die durch Experten wie Box2D.
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

Schreibe einen Kommentar