42 Videos
238 Protokoll
Um diese Kollisionen zu implementieren, box2d wir, was als Kontakte bekannt. Jedes Mal gibt es eine Kollision oder zwei Vorrichtungen irgendwie kollidieren oder versuchen, die gleiche Region von Raum zu besetzen, tritt Kontakt und kann davon benachrichtigt. Für diese Welt eine Methode bringt setContactListener genannt, mit dem wir eine ContactListener unsere Welt, assoziieren die Zuhörer zugeordnet ist zu hören, wenn diese Kontakte auftreten.
Also werde ich nur ein setContactListener (neu ContactListener ()), um eine schnell zu definieren, obwohl dies in einer besseren Art und Weise getan werden kann. Wie Sie sehen können, implementiert ContactListener mehrere Methoden. Wir können beginContact verwenden, um festzustellen, wann wir eine Kollision begonnen haben, und endContact zu erkennen, wenn wir eine Kollision beendet haben. preSolve und postSolve laufen, wenn physischen Kontakt verarbeitet werden und können so
tun körperliche spezielle Parameter verwenden, aber in unserem Fall werden wir noch nicht verwenden. Wir nehmen nur BeginContact und EndContact. Jedes Mal, wenn der Spieler irgendwie mit Erde kollidieren, wird es einen Kontakt zwischen zwei Lampen erzeugen, die Sie durch Zugriff auf getFixtureB der Kontakt getFixtureA und Methoden. Dies ist, wo die Probleme kommen, weil wir anfangs nicht wissen kann, wo der Körper,
wenn die Halterung A oder B Befestigung, so alles, was wir hier tun, und alle Entscheidungen, die wir zu erkennen, wenn der Körper auf den Boden trifft, wir müssen, ob == Körper A betrachten, B == Boden, als wenn A == Boden, B == Körper, so müssen wir die gleiche Sache zweimal zu schreiben. Es ist nicht so sauber wie es sein könnte. Zum Beispiel kann ich die Kontakthalterung mit contact.getFixtureA A get () und B Befestigung contact.getFixtureB () verwenden.
Und jetzt kann ich erkennen, ob mein Befestigung am Körper entspricht oder nicht. Und das ist, wo die Probleme kommen, weil ... wie soll ich tun? Zunächst weiß ich das Gerät nur selbst. Was wir tun müssen, ist festzustellen, beispielsweise wenn fixtureA dieselbe Variable ist, dass minijoeFixture und fixtureB die gleiche wie sueloFixture, obwohl ich werde zeigen, wie wir dies durch UserDatas auf andere Weise tun können. Denn jetzt, wenn die Befestigung A
Es ist zu Minijoe, Vorrichtungs- und B ist der Boden, kann unser Körper zu springen fragen. Man könnte denken, es ist einfach, nennen Sprung. Ich dachte auch, es wäre so, aber es funktioniert nicht. Sie können keine Starthilfe innerhalb eines ContactListener machen, weil es Sprünge erfordern, dass der Motor nicht funktioniert, und während einer Kontakt Box2D wird auf Dinge wie diese arbeiten, es wird nicht funktionieren. Stattdessen haben wir das tun, was ist an einem Punkt fragen Box2D
die frei ist, springen. Und das bedeutet in unserem Spiel zu erinnern, eine Starthilfe zu sein. Und das bedeutet, dass ich im Grunde erstellen Sie eine Boolesche Variable, die den Wert haColisionado hat. Hier kann ich, wenn eine Kollision wahren Wert auftritt. Und wie ich schon sagte, weil ich meine Leuchte müssen sowohl A als auch B Leuchte ist mit einem Körper oder einem anderen verbunden ist, habe ich dies zweimal zu tun. Wenn beispielsweise der Boden fixtureA
anstatt die Joe zu sein, muss ich das gleiche tun. HaColisionado auf true gesetzt. Und wenn wir aus unseren Manager Kollisionen sind, kann ich schon machen, wenn wir gespielt oder hat kollidierte, springen wir und dann auch haColisionado auf false gesetzt werden, dass aus irgendeinem Grund zu vermeiden, kann mehrmals springen. So jetzt jedes Mal, wenn eine Kollision auftritt, wird wieder springen. Wie gesagt, kann man keine Sprünge innerhalb der gleichen Manager Kollisionen machen,
weil Sie tun, wenn Sie arbeiten. Also keine andere Wahl, eine Flagge zu setzen, so später in dem Fall zum Beispiel von haColisionado zu tun. Dies ist oft mit Einheiten getan, da es eine ernsthafte Einheit als BodyEntity oder PlayerEntity, mit Eigenschaften wie estaSaltando, debeSaltar, enElAire sein könnte, sein flexibler zu steuern. In meinem Fall wie diesen ist es so bequem, alle Variablen noch tue, nicht zugreifen können,
aber sicher sein, dass, wenn Scene2D diesen Bildschirm integrieren, werden wir es sauberer zu machen bewegen, offensichtlich.
Über den Autor
Biografie: Analyst-Programmierer in verschiedenen Sprachen. Tutor PREMIUM-Plattformen weltweit als CodigoFacilito anerkannt. Editor Cristalab Artikel. Mein YouTube-Kanal wird von der ANAYA und LaTostadora Verlag gefördert. Ich mag im Detail und geben einige Beispiele für die Vermeidung von Missverständnissen zu erklären.