Kollision funktioniert unten aber nicht oben

DasDirt

Mitglied
Hi der Titel sagt alles mein Problem ist es das meine Kollision unten aber nicht oben funktioniert.

Hier meine Kollisions Klasse:
Java:
public class CollisionBox {
    private double x, y, width, height;

    public CollisionBox(double x, double y, double width, double height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public boolean hasCollided(double x, double y) {
        //Check if the given coordinates are in the area of the collision box
        return x > this.x && y > this.y && x < this.width && y < this.height;
    }

    public void updateCollisionBox(double x, double y, double width, double height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public boolean checkCollisionWithAnotherCollisionBox(CollisionBox collisionBox){
        return collisionBox.getX() > this.getX() && collisionBox.getY() > this.getY() && collisionBox.getWidth() < this.width && collisionBox.getHeight() < this.height;
    }

    public void renderCollisionBox() {
        RenderUtil.drawRect(x, y, width, height, Color.RED.getRGB());
    }

    /*Setter & Getter*/

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
}

und hier der Code, wo ich die box erstelle, update und abfrage:

Java:
private CollisionBox upper;

this.upper = new CollisionBox(this.x, this.level.getHeight(), this.x + this.width, this.y + this.height + Main.mainInstance.getSpace());

this.upper.updateCollisionBox(this.x, this.level.getHeight(), this.x + this.width, this.y + this.height + Main.mainInstance.getSpace());

this.pipe.getUpper().checkCollisionWithAnotherCollisionBox(this.bird.getCollisionBox())//ist ein boolean in einer if abfrage

das ganze soll ein Flappy Bird werden ich weiß nicht warum die Kollisions box verbuggt ist da sie unten funktioniert
so habe ich es unten gemacht:
Java:
private CollisionBox under;

this.under = new CollisionBox(this.x, this.y, this.x + this.width, this.y + this.height);

this.under.updateCollisionBox(this.x, this.y, this.x + this.width, this.y + this.height);

this.pipe.getUnder().checkCollisionWithAnotherCollisionBox(this.bird.getCollisionBox())//ist ein boolean in einer if abfrage

ich lasse mit die boxen rendern und sie werden angezeigt also denke ich das es an der Kollisions abfrage liegt.
Ich hoffe das mir jemand von euch helfen kann dies zu fixen.
 

mihe7

Top Contributor
width und height sind irreführende Bezeichnungen. Tatsächlich werden in CollisionBox die zwei Punkte links oben und rechts unten verwaltet. Die Methode checkCollisionWithAnotherCollisionBox (NB: WithAnotherCollisionBox kanst Du Dir sparen, das ergibst sich aus dem Typ des Parameters) prüft lediglich ab, ob die betreffende Box die übergebene Box enthält. Sie prüft nicht, ob es Überschneidungen gibt.
 

DasDirt

Mitglied
width und height sind irreführende Bezeichnungen. Tatsächlich werden in CollisionBox die zwei Punkte links oben und rechts unten verwaltet. Die Methode checkCollisionWithAnotherCollisionBox (NB: WithAnotherCollisionBox kanst Du Dir sparen, das ergibst sich aus dem Typ des Parameters) prüft lediglich ab, ob die betreffende Box die übergebene Box enthält. Sie prüft nicht, ob es Überschneidungen gibt.
Danke für die schnelle Antwort. Das width und height irreführende Bezeichnungen sind ist mir gestern Abend bewusst geworden. Allerdings habe ich keine Ahnung wie ich dann Überschneidungen überprüfe und warum es unten aber nicht oben funktioniert
 

mihe7

Top Contributor
Naja, überleg Dir mal für den eindimensionalen Fall, dass sich bei
Code:
   a        b   
|-----| |-------|
a1   a2 b1     b2

    b        a  
|-------| |-----|
b1     b2 a1    a2
a und b nicht überschneiden. Salopp formuliert liegt keine Überschneidung vor, genau dann wenn ein Element vor dem anderen endet, also a2 < b1 oder (OR) b2 < a1 gilt. Umgekehrt liegt also eine Überschneidung vor, genau dann wenn a2 >= b1 und (AND) b2 >= a1 gilt: Nachtrag: ich gehe natürlich stillschweigend davon aus, dass a1 < a2 und b1 < b2 gilt.

Das machst Du jetzt für beide Dimensionen und bist fertig.
 

Javinner

Top Contributor
soll ein Flappy Bird werden
Wenn ich mir das Spiel anschaue, dann wird fortlaufend eine Kollision von Kreis(Vogel) und Rechteck(Wand) geprüft.
Java:
public boolean circleRectCollision(int mx, int my, int r, int x, int y, int width, int height) {
        int mrx = mx < x ? x : mx > x + width ? x + width : mx;
        int mry = my < y ? y : my > y + height ? y + height : my;
        int dx = mrx - mx;
        int dy = mry - my;
        return dx * dx + dy * dy < r * r;
}
Man könnte jetzt noch den parametrisierten Kopf etwas aufräumen, so dass dieser nur die Klasse Circle und Rectangle übergeben bekommt, aber im Großen und Ganzen würde ich persönlich wohl so das Problem angehen.

edit: Java selbst bietet eine Möglichkeit, Rechtecke auf Kollision zu prüfen. Schau dir dafür die Klasse Rectangle an, die Methoden intersection(Rectangle r) und intersects(Rectangle r) könnten nützlich für dich sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
B Kollision Spiele- und Multimedia-Programmierung 5
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
S Kollision Spiele- und Multimedia-Programmierung 2
J Kollision genau erkennen mit intersects Spiele- und Multimedia-Programmierung 27
K a* kollision der einheiten Spiele- und Multimedia-Programmierung 3
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
F Rechteck Kollision Spiele- und Multimedia-Programmierung 10
H 2- D Kollision Spiele- und Multimedia-Programmierung 14
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
O Kollision Polygon und Rechteck Spiele- und Multimedia-Programmierung 2
S Pacman Kollision von Münzen und Mauern Spiele- und Multimedia-Programmierung 11
P Gridpane Kollision Spiele- und Multimedia-Programmierung 3
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
L Kollision soll nur an oberer Seite (Breite) möglich sein Spiele- und Multimedia-Programmierung 6
Hercules Kisten Kollision Spiele- und Multimedia-Programmierung 2
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
T Pixelgenaue Kollision Spiele- und Multimedia-Programmierung 5
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S Kollision tile-based 2D Plattformer Spiele- und Multimedia-Programmierung 2
D Greenfoot Kollision Spiele- und Multimedia-Programmierung 5
D Kollision verhindern Spiele- und Multimedia-Programmierung 2
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Kr0e Kollision zweier Kugeln... Wo ist Newton ?? Spiele- und Multimedia-Programmierung 9
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
Helgon Kollision von jeder Seite des Blocks Spiele- und Multimedia-Programmierung 3
Fab1 Kollision die 100ste Spiele- und Multimedia-Programmierung 5
D Jump'n'run Kollision bei Blöcken Spiele- und Multimedia-Programmierung 10
P PingPong Spiel - Kollision Spiele- und Multimedia-Programmierung 2
C Bitmaske und Kollision Spiele- und Multimedia-Programmierung 2
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
S Kollision Kreis Rechteck Spiele- und Multimedia-Programmierung 8
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
baddestpoet pixelgenaue Kollision Spiele- und Multimedia-Programmierung 4
S Kollision in 2D Spiele- und Multimedia-Programmierung 12
B Gedrehte Rechtecke Kollision Spiele- und Multimedia-Programmierung 4
J Kollision mit Block (Wand) Spiele- und Multimedia-Programmierung 11
C Kollision in Java3D Spiele- und Multimedia-Programmierung 4
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
Z Kollision Spiele- und Multimedia-Programmierung 3
F Kollision für Arkanoid Spiele- und Multimedia-Programmierung 2
N Kollision abfragen Spiele- und Multimedia-Programmierung 3
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
D MIDIdevice open funktioniert nicht Spiele- und Multimedia-Programmierung 1
P Teamspeak interface mit JFrame funktioniert nicht Spiele- und Multimedia-Programmierung 3
N Animation funktioniert icht wie sie soll Spiele- und Multimedia-Programmierung 10
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
Damtonix Gameloop funktioniert nicht! Spiele- und Multimedia-Programmierung 6
temi libGDX Box2d ApplyTorque() funktioniert nicht Spiele- und Multimedia-Programmierung 1
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26
S KeyEvent funktioniert nicht, wenn Buttons dem Frame hinzugefügt werden Spiele- und Multimedia-Programmierung 7
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
J KeyMapping funktioniert nicht Spiele- und Multimedia-Programmierung 5
J Sound einbinden funktioniert nicht Spiele- und Multimedia-Programmierung 13
D Slick Lib - Bilder einlesen funktioniert nicht Spiele- und Multimedia-Programmierung 2
M Mathetrainer - Reset Button funktioniert nicht! Spiele- und Multimedia-Programmierung 8
K Wie funktioniert hier ein Score ? Spiele- und Multimedia-Programmierung 4
O A* funktioniert, aber zu langsam Spiele- und Multimedia-Programmierung 10
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
StrikeTom KeyListener Funktioniert nicht Spiele- und Multimedia-Programmierung 3
aze Java 3D 1.5.2 auf Mac(Snow Leopard) funktioniert nicht mit Java SE 1.6 Spiele- und Multimedia-Programmierung 3
K "Animation" funktioniert nur bedingt. Spiele- und Multimedia-Programmierung 8
G Undo/Redo funktioniert nicht richtig Spiele- und Multimedia-Programmierung 2
Kidao Warum funktioniert hier keine Tastaturabfrage? Spiele- und Multimedia-Programmierung 6
S Sudoku Solver funktioniert beim 2. Aufruf nicht mehr Spiele- und Multimedia-Programmierung 11
R Kollisionserkennung funktioniert nicht Spiele- und Multimedia-Programmierung 3
R KeyListern funktioniert nicht. :S ? Spiele- und Multimedia-Programmierung 7
D Beispielprogram funktioniert nicht Spiele- und Multimedia-Programmierung 8
M Sonnensystem - Eigenrotation der Planeten funktioniert nicht Spiele- und Multimedia-Programmierung 4
M Wie funktioniert der RotPosPathInterpolator? Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben