2010-07-15 5 views
16

Hey, ich bin derzeit auf der Suche nach verschiedenen Methoden zur Umsetzung von Kollisionsreaktion in 2D-Videospielen, etwas ähnliches zu diesem Tutorial Metanet hat: N Tutorial Ich bin auf der Suche nach etwas in XNA implementieren, aber jede Sprache würde gut. Ich interessiere mich mehr für Implementierung programmgesteuert als tatsächliche Theorie. Ich würde eher Anfängerfreundliches Material bevorzugen, aber ich freue mich über weitere Themen.Gute 2D Collision Response Referenzen

Also könnte jemand gute 2D Kollisionsreaktion Artikel/Bücher vorschlagen?

(PS: Ich bin mehr daran interessiert, in Reaktion als Nachweis)

+0

Sorry, wir können nicht auf Stackexchange-Sites migrieren. Aber wenn Sie auf sie zugreifen können (ist GameDev in der Beta?), Können Sie einfach die Frage dort drüben stellen. – Will

Antwort

15

Die N tutorial, die Sie bereits erwähnt, ist eine großartige Ressource mit zu beginnen. Ich empfehle auch den sehr guten Artikel 2D Polygon Collision Detection. Es kommt mit einer großartigen C# Implementierung und einem Beispiel für Polygon Kollisionserkennung mit dem Trennachsensatz und erklärt einige der Konzepte besser.

Was das Reagieren auf eine Kollision betrifft, hängt es vom Szenario ab. Bei Spielen möchten Sie möglicherweise anhand der aktuellen Geschwindigkeit auf mögliche Kollisionen prüfen und dann einfach die tatsächliche Geschwindigkeit anpassen, um eine Kollision zu vermeiden. Sie können auch einen Bounce-Effekt implementieren. In jedem Fall wird es wahrscheinlich sowohl die Geschwindigkeit als auch die Richtung des Objekts einstellen.

Sie können den Trennachsensatz verwenden, um die Kollisionserkennung durchzuführen und die Polygonprojektion zu verwenden, um die Entfernung zum Ziel auf einer bestimmten Achse zu ermitteln. (die meiste Zeit der Vektor, auf dem Sie sich bewegen).

+0

Das ist ausgezeichnet! – Jeff

+0

Gern geschehen! –

+1

Ich finde diese C# Version eine bessere Ressource zu sein. Das Tutorial geht ausführlicher auf das Projizieren eines Polygons auf eine Achse ein, die das N tut vermisst. Wenn jemand aus dem N Tut etwas Verwirrung hat, sieh dir dieses C# an. – Jeff

0

Physik-Motoren sind sehr kompliziert. Sie wären viel besser dran mit einem vorhandenen.

  • Farseer (C#, abgeleitet von einer älteren Version von Box2D).
  • Box2d (C++, hat es .NET-Bindungen)
  • Chipmunk (C, ich glaube nicht, dass eine C# Port hat, aber man konnte man machen).
  • Wenn Sie Physik in Ihrem Spiel verwenden möchten, verwenden Sie Farseer oder eine Box2D-Bindungen. Wenn Sie etwas über Physik lernen wollen, sollten Sie C# -Port von Box2D oder Chipmunk erstellen. Wenn Sie nur neugierig sind, ist der gesamte Code Open Source.

    +0

    Ich interessiere mich weniger für realistische Physik und interessiere mich mehr dafür, wie Sie mit der tatsächlichen Kollision umgehen (wie N Projektion verwendet). Ich denke, was ich suche ist die Grundlagen des bloßen Knochens, nichts kompliziertes. Ich habe Box2D angeschaut und von Farseer gehört, und sie sehen ziemlich gut aus und ich würde definitiv auf das eine oder andere zurückgreifen, wenn ich mich dazu entschließen würde, ein Physik-basiertes Spiel zu machen. Box2d ist auch auf Flash. – Jeff

    1

    Wie viel Detail benötigen Sie? Die Beantwortung einiger dieser Fragen würde Ihnen helfen, Pakete zu eliminieren, die nicht das tun, was Sie brauchen.

    Müssen Sie sich um die Objektrotation sorgen? Dann müssen Sie sich Gedanken über Hebelarme, Drehimpuls, Trägheitsmomente und Drehmomente machen.

    Müssen Sie sich über Deformationen Gedanken machen? Dann müssen Sie in die Finite-Elemente-Analyse, Spannung/Dehnung usw. einsteigen - etwas, das beschreibt, wie die Objekte intern auf externe Kräfte reagieren.

    Was ist mit Reibungseffekten? Dann benötigen Sie Reibungskoeffizienten oder möglicherweise Geschwindigkeitsmodelle für den Luftwiderstand.

    Gravitationseffekte? Elektromagnetische Wirkungen? Andere Kräfte?

    +1

    Ich möchte buchstäblich nur grundlegende Antwort. Ein Tutorial, das etwas wie Mario 3 zum Beispiel implementiert, wäre in Ordnung (obwohl der New Mario ziemlich spaßige Physik hat ...). Ich möchte wissen, was sie tun, um auf Kollisionen zu reagieren. Produzieren sie einen minimalen Korrekturvektor und ziehen sie aus? Benutzen sie kleine Federn? Aber vor allem suche ich, wie sie das umgesetzt haben. Das N-Tutorial, das ich gepostet habe, ist ziemlich nah dran an dem, wonach ich suche, aber ich würde lieber etwas tiefer gehen. – Jeff

    -2
    +0

    Ich habe davon gehört. Was ist Kollisionsweis? Auch nicht wirklich, was ich suche, aber danke :) – Jeff

    +0

    Ich bin nicht sicher, in welcher Umgebung Sie entwickeln, aber Cocos2d kann für den Mac und das iPhone verwendet werden, aber ich bin nicht sicher, was es sonst noch kann verwendet werden (falls vorhanden.) – gWaldo

    +0

    cocos ist für Apple-Produkte, nicht XNA – redcodefinal

    1

    Wenn Sie eine grundlegende Antwort auf Kollision bzw. onse, hier ist es:

    for each pair of objects that collide 
        ask gently to the collision detection lib their interpenetration distance 
        Apply an impulse (i.e. a force in the duration of the frame) to both objects : 
         force proportional to penetration depth (you will have to tune the coef by hand) 
         direction : perpendicular to the collision normal. 
         application point : the collision point (approximately, since it s not a point anymore but a volume) 
    integrate (Euler, Verlet,)\ 
    
    0

    Ich war auch für gleiche Informationen suchen, Die nutzbare , was ich bisher

    http://www.myphysicslab.com/collision.html

    das Schlimmste, was hier war für mich gefunden ist Tahat dies ohne Reibung (Tangens Kollisionsimpuls nur normalen Impuls) und ich denke, die mit solchen Reibungsimpuls wäre besser, aber immer noch nicht gefunden, ein Tutorial, wie man richtig implementieren dass