Ich habe eine Frage, die mich verrückt macht, weil ich denke, dass es ziemlich einfach sein sollte, ein Tutorial dazu zu finden. Ich verwende derzeit XNA und Farseer, um ein einfaches Plattformspiel zu erstellen. Ich bin kurz davor, damit fertig zu werden, aber ich möchte, dass meine Monster schlauer sind. In diesem Fall bedeutet das, dass ich nicht möchte, dass meine Monster von Klippen fallen.
Um es einfach auszudrücken, ich möchte etwas, das den Bereich vor meinem "Monster" überprüft, um festzustellen, wann das Monster die Richtung ändern soll. Könntet ihr mich in die richtige Richtung weisen?
Was soll ich verwenden, es sollte eine einfache Lösung oder einen einfachen Algorithmus geben, um dies zu überprüfen, nein?
quelle
Eine naive Art der Implementierung ist die Verwendung von Raycasting.
Berechnen Sie, wo sich Ihr Monster in einem kleinen Teil der Zeit befindet (wahrscheinlich in einem Frame). Von dieser Position aus (oder wenn Sie robuster sein möchten, diese Position +/- der Begrenzungsbereich Ihres Feindes) führen Sie einen Raycast nach unten durch. Wenn es nicht auf etwas in einem angemessenen Bereich trifft (abhängig davon, wo Sie Ihren Raycast vertikal starten, die Höhe des Charakters, Ihre gewünschte "Schrittgröße" usw.), können Sie sich vorstellen, dass es eine Klippe gibt, auf der der Charakter sein möchte. und beschließen, die Richtung entsprechend zu ändern.
quelle
Mit meiner KI überprüfe ich einfach, ob sich unten eine Plattform befindet und in Fahrtrichtung (ohne Verwendung eines Kachelsystems, nur eines groovigen Kollisionssystems). Wenn dies nicht der Fall ist oder wenn es auf einen festen Block trifft, sieht es verwirrt aus und dreht sich um.
Auf diese Weise können Sie dynamische Karten haben und trotzdem eine funktionierende (lose verwendete) KI haben.
quelle
Ich vermute, Sie verwenden eine Kachelkarte. In diesem Fall besteht die Lösung darin, sie auf der Grundlage von Kachelindizes durchzuführen. Du musst herausfinden, auf welchem Plättchen sich dein Monster gerade befindet, mit den folgenden Formeln:
Sobald Sie diese kennen, müssen Sie herausfinden, in welche X-Richtung Sie fahren (um nach Blöcken zu suchen):
Jetzt haben Sie eine normalisierte X-Richtung, mit der Sie arbeiten können.
Als Nächstes sollten Sie die Blöcke überprüfen, um festzustellen, ob Sie die Richtung ändern sollten:
Sie bekommen die allgemeine Idee. Stellen Sie sicher, dass Sie zurückkehren
TileCollision.Impassable
(oder was auch immer), wenn sich die Kachelindizes außerhalb der Karte befinden, um zu verhindern, dass Ihr Programm mit einem ungültigen Index abstürzt, und um zu verhindern, dass Monster die Karte verlassen.Ich denke, es hängt wirklich davon ab, wie Sie mit Fliesen umgehen, aber dies ist die Lösung, die für mich funktioniert hat.
Basierend auf den Tutorials von http://www.sgtconker.com/ (obwohl die Website nicht verfügbar ist, während ich dies schreibe)
quelle
Stelle eine Kiste auf der Außenseite der Plattform auf, die sich auf einer separaten Ebene befindet, und lass die Monster dies überprüfen, damit sie nicht herunterfallen, aber der Spieler kann es trotzdem.
quelle