Ich bin neu in libgdx und finde, dass ich von den einfachsten Dingen überrascht werde. Offenbar möchte ich, dass ich bestimmte Dinge mache, aber die Dokumentation sagt mir nicht, was das ist.
Ich möchte ein sehr einfaches 2D-Spiel machen, in dem der Spieler ein Raumschiff kontrolliert. Das Mausrad zoomt hinein und heraus und Informationen und Steuerelemente werden auf dem Bildschirm angezeigt.
Aber ich kann das Mausrad nicht dazu bringen, die Benutzeroberfläche NICHT zu zoomen. Ich habe versucht, zwischendurch mit den Projektionsmatrizen zu fummeln
Hier ist mein (aktueller) Code:
public class PlayStage extends Stage {
...
public void draw() {
// tell the camera to update its matrices.
camera.update();
// tell the SpriteBatch to render in the
// coordinate system specified by the camera.
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
aButton.draw(spriteBatch, 1F);
playerShip.draw(spriteBatch, 1F);
spriteBatch.end();
}
}
camera.zoom wird durch scrollen (int betrag) eingestellt.
Ich habe ungefähr ein Dutzend Variationen des Themas des Änderns der Projektionsmatrix der Kamera nach dem Ziehen des Knopfes, aber bevor das Schiff ist, ausprobiert, aber egal was ich mache, passieren die gleichen Dinge sowohl mit dem Knopf als auch mit dem Schiff. So:
Was ist die übliche libgdx-Methode zum Implementieren einer Bildschirmbenutzeroberfläche, die nicht durch die Projektionsmatrix / den Zoom der Kamera transformiert wird?
camera.project(Vector3 screenCoords)
, um etwas von Weltkoordinaten auf Bildschirmkabel zu projizieren.Antworten:
Sie können einfach einen anderen SpriteBatch verwenden, ohne die Projektionsmatrix zum Zeichnen der Schwebepalette festzulegen.
quelle
Ich denke, der einfachste Weg, eine Hud-Map zu erstellen, wäre, eine zweite Kamera zu verwenden und diese zu überlagern. Dieses Problem wurde vor einiger Zeit in den libgdx-Foren diskutiert und ich erinnere mich, dass dort jemand seinen Hud-Code gepostet hat. Vielleicht möchten Sie dort drüben stöbern und sehen, was Sie sich einfallen lassen.
quelle
Hier ist eine Methode, die ich für die Arbeit mit einem einzelnen Stapel verwende:
Zeichne zuerst alles andere, dann zuletzt dein HUD:
Wenn Sie nachher mehr zeichnen möchten, stellen Sie sicher, dass Sie die Projektionsmatrix auf den gewünschten Wert zurücksetzen.
quelle
.cpu()
jedes Mal eine neue Matrix erstellt wird). Besser eine permanente Puffermatrix haben und ihre Werte bei jedem Frame einstellen.Denken Sie daran, dass die erste Kamera den Hintergrund festlegt. Der zweite ist, wo sich der Boden bewegt. Wenn Sie sich fragen, warum sich das Sprite auf der Bühne bewegt, weil das Geheimnis der Boden ist, der sich bewegt. Das Sprite läuft gerade an seinem Platz, da Sie eine dritte Kamera verwenden. Möglicherweise haben Sie den Boden der zweiten Kamera gescrollt, aber die Schwebepalette befindet sich noch auf dem dritten Platz. Versprich es ist wahr! Bei der dritten Kamera wird das Sprite in der Mitte für die Richtung angezeigt, unabhängig davon, ob es durch einen kleinen Animationscode nach links oder rechts verschoben wird, und das HUD (dh Punktzahl, verbleibende Leben, verwendeter Gegenstand). Wenn Sie etwas brauchen, fragen Sie mich.
quelle
Ich habe es so gemacht:
Zuerst habe ich eine neue Klasse namens Hud erstellt. Es implementiert
Disposable
aufgrund der Ressourcenverwaltung. Dann müssen Sie eineStage
für Ihren Inhalt und eine neue definieren,viewport
da eine neue Kamera verwendet wird. Sie müssen ein neues definierenTable
, das Sie dem hinzufügen könnenStage
. Sie können Ihre Inhaltetable
wie gewohnt hinzufügen . Der Rest des Codes ist spielspezifisch. Ignoriere ihn einfach.}
und dann im Wiedergabebildschirm wie folgt:
Zuallererst benötigen Sie eine Variable, um auf Ihren Hud zu verweisen:
Und dann erstellen Sie im Konstruktor eine neue Instanz Ihrer Klasse:
In der Update-Methode müssen Sie diese Codezeilen einfügen, da ich denke, dass Sie einige Spielinformationen wie Punkte oder die verbleibenden Leben anzeigen möchten:
In der Render-Methode machen Sie folgendes:
und vergessen Sie am Ende nicht, Ihren Hud in der Entsorgungsmethode zu entsorgen
Ich hoffe das hilft
quelle