Ich arbeite an einem einfachen 2D-Spiel mit Java, Swing und ohne Rahmen. Ich habe einen rechteckigen Player, den der Benutzer bewegen kann. Auf der Karte sind einige Hindernisse, die der Spieler nicht durchmachen darf. Ich habe das gemacht, indem ich ein neues Rectangle-Objekt für den Spieler und jedes Hindernis mit ihren Grenzen erstellt habe. Aber ich bin mir nicht sicher, ob das der richtige Weg ist. Es funktioniert, aber die Bewegungen des Spielers sind nicht wirklich benutzerfreundlich. Wenn der Spieler zwei Hindernisse überwinden will, muss er an den perfekten Koordinaten vorbeikommen.Java Spiel Hitbox Detection & Rounded Corners
Ist es sogar eine gute Idee, mit einem Rectangle-Objekt nach Überschneidungen zwischen dem Spieler und dem Hindernis zu suchen, oder sollte ich es anders machen?
Jetzt für meine zweite Frage:
Ich möchte die rechteckigen Hitboxen mit der gleichen Hitbox aber mit abgerundeten Ecken ersetzen, so dass der Spieler leichter passieren konnte.
So sieht das Spiel aus, wenn Hitboxen aktiviert sind.
Der Code, der Spieler und die Hindernisse überprüft, ob noch durchschnitten haben:
for (Player p : this.getPlayerArray()) {
Rectangle recPlayer = p.playerBounds();
for (Obstacle kiste : obstacleArray) {
Rectangle recKiste = kiste.obstBounds();
if (recPlayer.intersects(recKiste)) {
p.setX(100); //Not actual code here
}
}
}
Die Funktion, die die Hitbox des Spielers/Hindernis zurückgibt:
public Rectangle obstBounds() {
return new Rectangle(this.getX(),
this.getY(), image.getImage().getWidth(null),
image.getImage().getHeight(null));
}
Ich denke, dass Sie die Kollision basierend auf einem Kachel-Karten-System basieren können. – GiantTree
@GiantTree So habe ich die Karte erstellt. Aber es ist alles selbst codiert. Gibt es einen Unterschied bei der Kartenerkennung? – Aruloci
Nur zur Verdeutlichung: Bewegst du dich auf einer Kachelkarte oder gibt es freie Bewegung? Wenn sich Ihr Spieler auf einer Kachelkarte bewegt, können Sie einfach prüfen, ob die Kachel, auf die Sie sich bewegen möchten, passierbar ist und sich entsprechend bewegen. – GiantTree