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!
 
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.
 
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:

Zurück
Oben