Ich versuche mein erstes Spiel in JavaFX zu machen, wo sich ein Spielerobjekt (kein Knoten) innerhalb eines Levels bewegen wird. Der volle Level sollte jedoch nicht innerhalb des Fensters sichtbar sein, nur ein Teil davon sollte den Spieler umgeben. Ich habe ziemlich viel nach einer Lösung gesucht, die mit der Art funktioniert, wie ich mein Projekt gemacht habe, aber nicht erfolgreich war. Der folgende Code beschreibt, wie ich meine GUI eingerichtet habe:Wie erstelle ich eine Ansicht, die dem Player in einem JavaFX-Spiel folgt?
private VBox appRoot;
private Pane gameRoot;
private Canvas canvas;
private GraphicsContext gc;
private HBox uiRoot;
Dies ist die verschiedenen Scheiben, die ich benutze. Der appRoot enthält sowohl den GameRoot als auch den uiRoot in dieser Reihenfolge. Der GameRoot enthält die Leinwand. Alles innerhalb der Ebene, einschließlich der Ebene selbst wird auf die Leinwand gezeichnet, wie folgt aus:
canvas = new Canvas(ROOM_WIDTH, ROOM_HEIGHT);
gc = canvas.getGraphicsContext2D();
createLevel(ROOM_WIDTH, ROOM_HEIGHT, CELL_WIDTH, CELL_HEIGHT);
gc.scale(2, 2);
drawLevel(gc, ROOM_WIDTH, ROOM_HEIGHT, CELL_WIDTH, CELL_HEIGHT);
player.render(gc);
createLevel und drawLevel schafft nur eine Ebene und zieht Plätze, auf denen verschiedene Blöcke sein sollte. Die Rendermethode des Player-Objekts zeichnet den Player an seinen X- und Y-Koordinaten. Wie Sie sehen können, habe ich die Leinwand skaliert, so dass jetzt die gesamte Ebene nicht angezeigt wird, wenn das Spiel gestartet wird.
Das Problem ist, dass ich es nicht so machen, dass, was in dem Fenster angezeigt wird die Dinge rund um das Spielerobjekt ist. Ich habe Code mit den Methoden setLayoutX und setLayoutY gesehen, aber ich konnte das nicht reproduzieren, so dass es funktioniert.
Ich wäre sehr dankbar, wenn jemand mir dabei helfen könnte, und hoffentlich ohne allzu viel zu ändern, wie die Zeichnung erfolgt.
Danke! :)
Auch sind hier zwei Bilder zeigen, wie es aussieht; Der erste ist, wenn der Spieler nicht in der aktuellen Ansicht ist, und der zweite ist mit dem Spieler in der Ansicht.
Wenn gc wie g2d funktioniert, würden Sie einfach gc.translate (xCoord, yCoord) verwenden –
@MitchWeaver Das hat etwas getan, aber der Bildschirm wurde nur weiß. Ich habe dabei die x und y des Spielerobjekts benutzt. Ich gehe davon aus, dass das Level in eine komische Position geraten ist, aber ich weiß nicht, was wirklich vor sich geht. – Xaril
Für mich sieht es so aus, als ob Sie mit der Skalierung ein Ansichtsfenster auf der Ebene haben möchten, anstatt die ganze Ebene anzuzeigen. Ist das korrekt? – hotzst