2D-Grafik Collision berechnen

Backes

Mitglied
Hallo, ich bin ein Quereinsteiger in Java 2D Programmierung. Ich schaute mir einige Videos und Tutorials im Internet an, um etwas ahnung von 2D Programmierung zu bekommen(Buch ist bestellt, doch die neugierde ist da ;) ).
Ich habe einen Character:

Java:
public character(){
	ImageIcon i = new ImageIcon("C:/game/still.png");
	character_img = i.getImage();
	x= 10;
	y = 172;
    width = character_img.getWidth(null);
    height = character_img.getHeight(null);
	this.collided = false;
}
public void move(){
	if(this.collided == true){
		collided = false;
	}else{
		if(x > 1137){
			x = 10;
		}else if(x < 9){
			x = 1130;
		}else{
			x = x + dx;
		}
		y = y + dy;
	}
}
public void isCollided(Boolean collided) {
    this.collided = collided;
}
public Rectangle getBounds() {
    return new Rectangle(x, y, width, height);
}

Und ich habe eine Box, mit der dieser kollidieren soll

Java:
public box(){
	ImageIcon i = new ImageIcon("C:/game/box.jpg");
	box = i.getImage();
	x=500;
	y=100;
    width = box.getWidth(null);
    height = box.getHeight(null);
}
public Rectangle getBounds() {
    return new Rectangle(x, y, width, height);
}

Das ganze wird so berechnet:
Java:
	character c;

public void actionPerformed(ActionEvent e){
		c.move();
                checkCollisions();
		repaint();
	}

public void checkCollisions() {
        Rectangle r2 = b.getBounds();
        	Rectangle r3 = c.getBounds();
            if (r3.intersects(r2)) {
                c.isCollided(true);
            }
    }

Wenn mein Character nun mit der Box kollidiert, kann er sich nicht mehr bewegen(was ja auch logisch ist). Wie kann ich jedoch einfügen, dass ich ihn nachher wieder bewegen kann. Gibt es einen fertigen "rebound" algorythmus? Wenn ich seine Position nämlich um -1px erhöhe, dann kann ich ihn wieder bewegen, jedoch klappt das nur von einer der 4 Seiten. Kollidiert er in die hintere Seite, dann durchdringt mein Character die ganze Box. Oder muss ich jede Seite einzeln nehmen, und ihm dann jewils auf der x achse +1 bzw -1 hinzufügen und auf der y achse auch?

Ich hoffe, das ganze war verständlich und der Code reicht. Falls nicht, kann ich euch alles posten.
Danke, Backes!
 

Kevin94

Top Contributor
Du musst ihn, wenn er sich wieder bewegen können soll, einen Schritt rückwärts laufen lassen. Du hast nicht geschrieben wire groß dx und dy sind, aber das wären die Werte um den du ihn zurücksetzten müsstest.

Und ob der Anfang der move-Methode so Sinn macht, wage ich zu bezweifeln:
Java:
if(this.collided == true){ //einfacher if(collided)
        collided = false;
Wenn der Character in einem Block drin steckt und sich bewegen soll, steckt er nicht mehr fest, bewegt sich dabei aber nicht?

PS: Code Conventions: Klassennahmen groß, isXY() ist der Getter für einen Boolean und setXY(boolean) oder nur xY(boolean) der dazugehörige Setter.
 

bERt0r

Top Contributor
Vergleichen wir das mal mit der Realität: Du willst dein Auto einparken. In deiner bewegeAutoEinStück Algorithmus in deinem Hirn guckst du erst nach, ob dein Auto noch nirgends angefahren ist. Dann steigst du aufs Gas. Wenn du wo anfährst, hüpfst du zurück in der Zeit oder so.

Wäre es nicht sehr viel einfacher nachzusehen bevor du dich bewegst, wieviel Platz du noch hast und ob es eine Kollision gibt? Dementsprechend kannst du dann auch deine Bewegung anpassen/abbrechen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tippster JavaFX Scene neu berechnen lassen AWT, Swing, JavaFX & SWT 5
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
Neumi5694 Größe von Komboboxen neu berechnen AWT, Swing, JavaFX & SWT 3
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
F Schriftgröße von Buchstaben berechnen AWT, Swing, JavaFX & SWT 3
H preferred size abhängig von Fenstergröße berechnen AWT, Swing, JavaFX & SWT 11
S Farbverlauf in for-Schleife berechnen AWT, Swing, JavaFX & SWT 4
M Swing JTextField "onthefly" auslesen und berechnen AWT, Swing, JavaFX & SWT 7
D Swing JViewPort, Absolut Koordinaten berechnen. AWT, Swing, JavaFX & SWT 2
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
T Swing JEditorPane Groesse berechnen AWT, Swing, JavaFX & SWT 2
C Alternative zu getFontMetrics um Stringlänge zu berechnen AWT, Swing, JavaFX & SWT 2
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
M Animation berechnen AWT, Swing, JavaFX & SWT 4
D Koordinaten von einem Kreissegment berechnen AWT, Swing, JavaFX & SWT 6
T Breite des Containers ist gegeben - wie die Höhe berechnen? AWT, Swing, JavaFX & SWT 3
J Schriftgröße aus vorhandenem Platz berechnen AWT, Swing, JavaFX & SWT 9
J resize eines Bildes automatisch berechnen lassen? AWT, Swing, JavaFX & SWT 2
C Farblayer berechnen AWT, Swing, JavaFX & SWT 24
G winkel berechnen AWT, Swing, JavaFX & SWT 4
P Winkel berechnen AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben