In Vorbereitung

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

Angeboten von openHPI Team

Dieses Video gehört zum openHPI-Kurs Java Workshop: Einführung in eine Java- Programmierumgebung (IDE) . Möchten Sie mehr sehen?

Breakout: intersect()

Beim Laden des Videoplayers ist ein Fehler aufgetreten, oder es dauert lange, bis er initialisiert wird. Sie können versuchen, Ihren Browser-Cache zu leeren. Bitte versuchen Sie es später noch einmal und wenden Sie sich an den Helpdesk, wenn das Problem weiterhin besteht.

Über dieses 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());
    }
}