2012-11-05 7 views
19

Ich mache ein Spiel mit LibGDX (Java).Wie macht man einen reibungslosen Kamera-Algorithmus?

Ich brauche die Kamera, um einem sich schnell bewegenden Charakter zu folgen. Der einfachste Weg, es zu tun ist, einfach zu schreiben:

this.getCamera().position.set(obj.x, obj.y, 0); 

Aber gibt es einen Algorithmus diese glatter zu machen? Wie wenn die Kamera nicht so streng ist und immer ein bisschen zu spät ist: Charakter geht schnell nach rechts, Kamera folgt mit leichter Verzögerung, oder wenn du plötzlich irgendwo weit auftauchst, teleportiert die Kamera nicht sofort, sondern reist mit Höchstgeschwindigkeit zu dir kommt näher heran, wird etwas langsamer und findet dich wieder.

Gibt es Libgdx-Bibliotheken, die das oder irgendjemand diese Erfahrung gemacht haben?

+0

"Aber, gibt es irgendeinen Algorithmus, um das weicher zu machen? *" Haben Sie irgendwelche Algorithmen selbst ausprobiert oder irgendwelche Google-Suchen für eine glatte Kamerainterpolation oder so gemacht? –

+1

Ich habe es selbst versucht und habe mehrere Arbeitsbeispiele, aber ich mag Ergebnis nicht viel, ich war neugierig, wenn es etwas schon herausgefunden werden kann, da es wie etwas klingt, was jeder Spielentwickler brauchen wird, In Bezug auf Google-Suche bin ich mir nicht sicher was zu suchen, bringt es Tonnen anderer Sachen. –

Antwort

6

Werfen Sie einen Blick auf Aurelion Ribon Java Universal Tween Engine. Dies führt eine Interpolation durch und hat mehrere Beschleunigungsgleichungen, von denen ich denke, dass sie Ihnen das bringen würden, wonach Sie suchen. Es hat auch andere fortgeschrittene Funktionen, wie zum Beispiel Wegweisen und Verketten bestimmter Aktionen für andere interessante Effekte.

Ihre Spiellogik könnte prüfen, ob sich der Charakter schnell bewegt oder eine Positionsänderung erfahren hat. Als Reaktion darauf kannst du deine aktuelle Kameraposition auf den Tween-Motor übertragen und ihn übernehmen lassen - indem du sanft auf die aktuelle Position des Charakters zoomst.

+0

Nur für den Rekord (ich weiß, das war eine Weile her) nein, Sie würden nicht die Tween-Engine für diese verwenden wollen, da der Spielcharakter immer bewegt und anfällig für benutzergesteuerte Richtungsänderungen ist. Der Aufwand, Tweens zu starten und zu killen, macht keinen Sinn. Verwenden Sie einfach den obigen Lerp-Algorithmus im upd (delta) -Aufruf. Das heißt, die UTE eignet sich hervorragend für andere solche Übergänge oder sogar für das Bewegen der Kamera für andere Dinge als das Folgen des Hauptspielcharakters. – RichieHH

+0

Ich stimme nicht zu. Obwohl ich keine Timing-Analyse durchgeführt habe, werden Tweens gepoolt, so dass die Auswirkungen von Starten und Töten minimal sein sollten. Das Zuweisen eines neuen Tweens ist einfach ein Satz von Zuweisungen, und das Löschen eines Tweens führt in ähnlicher Weise dazu, dass das Objekt wieder in den Pool zurückkehrt. Ich habe diesen Ansatz in einem Spiel verwendet, um die Kamerabewegung zu glätten, anstatt direkt auf den Charakter zu schießen, ohne dass sich die Leistung bemerkbar macht. Anstelle von Erschütterungen folgt die Kamera dem Spieler, der für das Auge viel besser aussieht. – MutantXenu

40

Versuchen Sie etwas Einfaches wie ein Zehntel der Entfernung. Es funktioniert überraschend gut.

+16

Vorschlag: Multiplizieren Sie auch mit Delta-Zeit, um die Bewegung unabhängig von der Framerate zu machen. – Mortennobel