In preparation

Java Workshop: Einführung in eine Java- Programmierumgebung (IDE)

Offered by openHPI Team

This video belongs to the openHPI course Java Workshop: Einführung in eine Java- Programmierumgebung (IDE) . Do you want to see more?

Breakout: intersect()

An error occurred while loading the video player, or it takes a long time to initialize. You can try clearing your browser cache. Please try again later and contact the helpdesk if the problem persists.

About this video


In der Rectangular und der Elliptic Klasse hat sich ein kleiner Fehler eingeschlichen.
Enrico Jugl hat in diesem Forenthread darauf aufmerksam gemacht und auch direkt die Lösung dazu beigetragen. Vielen Dank von unserer Seite!

Der Fehler ist, dass die Geometrie von Rectangular und Elliptic nicht mit der Darstellung übereinstimmen. Während wir bei der Darstellung von Brick, Paddle und Ball auf den Center Mode geschaltet haben, haben wir das bei der Geometrie nicht getan.

Das führt bei der Kollisionserkennung zu etwas seltsamen Verhalten. Die beiden unten stehenden Fixes sollten das beheben.

An einigen Stellen muss:

getX(), getY()

durch

getX()-getWidth()/2, getY()-getHeight()/2

ersetzt werden. Das sollte dafür sorgen, dass Geometrie und Darstellung wieder übereinstimmen.

Fix für Rectangular:

public abstract class Rectangular extends CollisionObject {

    public Rectangular(Game game, Point position, Dimension dimension) {
        super(game, position, dimension);
        geometry = new Rectangle2D.Float(getX()-getWidth()/2, getY()-getHeight()/2, getWidth(), getHeight());
    }

    @Override
    public void update(Point position, Dimension dimension) {
        super.update(position, dimension);
        ((Rectangle2D) this.getGeometry()).setFrame(getX()-getWidth()/2, getY()-getHeight()/2, getWidth(), getHeight());
    }
}

Fix für Elliptic:

public abstract class Elliptic extends CollisionObject {

    public Elliptic(Game game, Point position, Dimension dimension) {
        super(game, position, dimension);
        geometry = new Ellipse2D.Float(getX()-getWidth()/2, getY()-getHeight()/2, getWidth(), getHeight());
    }

    public Elliptic(Game game) {
        this(game, new Point(0, 0), new Dimension(10, 10));
    }

    @Override
    public void update(Point position, Dimension dimension) {
        super.update(position, dimension);
        ((Ellipse2D) this.getGeometry()).setFrame(getX()-getWidth()/2, getY()-getHeight()/2, getWidth(), getHeight());
    }
}