Ich baue ein einfaches Plattformer Jump n 'Run Style Spiel. Ich verwende keine Kacheln - stattdessen habe ich geometrische Formen für meine Level-Objekte (und der Player ist auch eine). Ich habe meinen Kollisionserkennungscode beendet und alles funktioniert soweit.
Als nächstes wollte ich das Springen implementieren. Überprüfen Sie einfach, ob der Spieler die entsprechende Taste drückt, und erhöhen Sie die Aufwärtsgeschwindigkeit. Funktioniert gut. Aber es funktioniert auch, wenn der Spieler in der Luft ist, was ich nicht will. ;-)
Ich muss also prüfen, ob der Spieler auf etwas steht. Meine erste Idee war, zu überprüfen, ob es im letzten Frame eine Kollision gab, und den Spieler als "springfähig" zu markieren, aber dies würde sogar ausgelöst, wenn der Spieler eine Wand in der Luft trifft. Da meine mathematischen Fähigkeiten nicht so gut sind, bitte ich um Hilfe - auch Hinweise, wie man das umsetzt.
Vielen Dank!
Sie sollten sicherlich eine Art Oberflächentyp implementieren. Denken Sie darüber nach, wie werden Sie es schaffen, wenn Sie eine Leiter hochklettern können, wenn Sie nicht wissen, ob Ihr Charakter gerade gegen eine Wand oder eine Leiter gestoßen ist? Sie könnten einfach OOP verwenden, um eine Typhierarchie mithilfe des Erbes zu verwalten. Ich empfehle jedoch, "Kategorien" zu verwenden, die mit einem Aufzählungstyp implementiert wurden:
Hier ist die Idee: Eine Aufzählung "Kollisionen" hat ein Flag für jede Kategorie. Beispielsweise:
Mit dieser Methode können Sie testen, ob der Spieler irgendetwas kollidiert hat, das Sie verwalten sollten, sodass Ihre Engine eine "Kollidierte" Methode der Entität aufrufen kann:
Die Methode verwendet bitweise Flags und den bitweisen "Oder" -Operator, um sicherzustellen, dass jede Gruppe basierend auf dem Binärwert der Kategorie einen anderen Wert hat. Diese Methode funktioniert einwandfrei und ist leicht skalierbar, sodass Sie Zollkollisionsgruppen erstellen können. Jede Entität (Spieler, Feind usw.) in Ihrem Spiel verfügt über einige Bits, die als "Filter" bezeichnet werden und die bestimmen, womit sie kollidieren kann. Ihr Kollisionscode sollte prüfen, ob die Bits übereinstimmen, und entsprechend reagieren, mit einem Code, der wie folgt aussehen könnte:
quelle
Wenn Sie davon ausgehen, dass sich der Fuß Ihres Charakters um eine gewisse Distanz unter dem Charakter befindet und Sie sich nicht von der Oberfläche entfernen, befindet sich Ihr Charakter auf dem Boden.
In grobem Pseudocode:
quelle
char
, auch nicht im Pseudocode.