Ich bin mit meinem Breakout Spiel mit 2 Platten (oben und unten) soweit, dass ich ich die zwei Platten erstellt habe und der Ball sich im Spielfeld bewegt.
Nun möchte ich das der Ball mit den Platten abprallt und sich dann die Richtung ändert ...
In der Klasse Ball habe ich zunächst eine Methode gebaut, die prüft, ob der Ball ein Paddle berührt.
Als nächstes habe ich mich dann an die Methode reflectOnPaddle gesetzt. Hier soll das Abrallverhalten an einem Paddle umgesetzt werden. Unabhängig von der Richtung, aus der der Ball gekommen ist, soll er gemäß des Bildes am Paddle abprallen. So kann der Spieler dann Einfluss auf das Abpralverhalten des Balls nehmen.
Zur Erzeugung des Richtungsvektors des Balls, habe ich einen Konstruktor in der Klasse Vector2D gebaut.
Dieser wird eingesetzt, da die aktuelle Position des tiefer oder höher gelegten Paddle-Mittelpunktes (Startpunkt) und die aktuelle Position des Ballmittelpunktes (Endpunkt) zur Erzeugung des neuen Richtungsvektors verwendet werden. Zur Berechnung des tiefer- oder höhergelegten Paddle-Mittelpunktes muss die Konstante Constants.REFLECTION_OFFSET in der Klasse Constants verwendet werden. Die Konstante beschreibt den Abstand zwischen der oberen Kante des Paddles und dem tiefer- oder höhergelegten Paddle-Mittelpunkt.
Bei meinem jetzigen Code, wird der Ball nicht an den Paddle abgeprallt und fliegt einfach durch.
Jemand eine Idee wo mein Fehler liegen könnte?
Würde mich jede Hilfe freuen.
Vielen Dank!

Nun möchte ich das der Ball mit den Platten abprallt und sich dann die Richtung ändert ...
In der Klasse Ball habe ich zunächst eine Methode gebaut, die prüft, ob der Ball ein Paddle berührt.
Code:
//Klasse Ball
public boolean hitsPaddle(Paddle p) {
if (position.getY() <= Constants.PADDLE_HEIGHT) {
if(position.getX() >= Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2 - Constants.BALL_DIAMETER) {
if(position.getX() <= Constants.SCREEN_WIDTH/2 + Constants.PADDLE_WIDTH/2) {
return true;
}
}
}
if(position.getY() >= Constants.SCREEN_HEIGHT-Constants.PADDLE_HEIGHT) {
if(position.getX() >= Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2 - Constants.BALL_DIAMETER) {
if(position.getX() <= Constants.SCREEN_WIDTH/2 + Constants.PADDLE_WIDTH/2) {
return true;
}
}
}return false;
}
Als nächstes habe ich mich dann an die Methode reflectOnPaddle gesetzt. Hier soll das Abrallverhalten an einem Paddle umgesetzt werden. Unabhängig von der Richtung, aus der der Ball gekommen ist, soll er gemäß des Bildes am Paddle abprallen. So kann der Spieler dann Einfluss auf das Abpralverhalten des Balls nehmen.
Zur Erzeugung des Richtungsvektors des Balls, habe ich einen Konstruktor in der Klasse Vector2D gebaut.
Dieser wird eingesetzt, da die aktuelle Position des tiefer oder höher gelegten Paddle-Mittelpunktes (Startpunkt) und die aktuelle Position des Ballmittelpunktes (Endpunkt) zur Erzeugung des neuen Richtungsvektors verwendet werden. Zur Berechnung des tiefer- oder höhergelegten Paddle-Mittelpunktes muss die Konstante Constants.REFLECTION_OFFSET in der Klasse Constants verwendet werden. Die Konstante beschreibt den Abstand zwischen der oberen Kante des Paddles und dem tiefer- oder höhergelegten Paddle-Mittelpunkt.
Bei meinem jetzigen Code, wird der Ball nicht an den Paddle abgeprallt und fliegt einfach durch.
Jemand eine Idee wo mein Fehler liegen könnte?
Würde mich jede Hilfe freuen.
Vielen Dank!

Code:
//Klasse Ball
public void reflectOnPaddle(Paddle p) {
//Oberes Paddle wenn der Ball die rechte hälfte des Paddle berührt
if (position.getY() == Constants.PADDLE_HEIGHT) {
if (position.getX() >= Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2 - Constants.BALL_DIAMETER) {
Position positionStart = new Position(Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2, Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT + Constants.REFLECTION_OFFSET);
}
}
//Oberes Paddle wenn der Ball die linke hälfte des Paddle berührt
if (position.getY() == Constants.PADDLE_HEIGHT) {
if (position.getX() <= Constants.SCREEN_WIDTH/2 + Constants.PADDLE_WIDTH/2 + Constants.BALL_DIAMETER) {
Position positionEnde = new Position(Constants.BALL_DIAMETER/2, Constants.BALL_DIAMETER/2);
}
}
//unteres Paddle wenn der Ball die rechte häflte des Paddle berührt
if (position.getY() == Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT) {
if (position.getX() >= Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2 - Constants.BALL_DIAMETER) {
Position positionStart = new Position(Constants.SCREEN_WIDTH/2 - Constants.PADDLE_WIDTH/2, Constants.REFLECTION_OFFSET - Constants.PADDLE_HEIGHT);
}
}
//unteres Paddle wenn der Ball die linke häflte des Paddle berührt
if (position.getY() == Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT) {
if (position.getX() <= Constants.SCREEN_WIDTH/2 + Constants.PADDLE_WIDTH/2 + Constants.BALL_DIAMETER) {
Position positionEnde = new Position(Constants.BALL_DIAMETER/2, Constants.BALL_DIAMETER/2);
}
}
}
Code:
//Klasse Vector2D
private Position Startpunkt;
private Position Endpunkt;
public Vector2D(Position Startpunkt, Position Endpunkt) {
double deltaX = Endpunkt.getX() - Startpunkt.getX();
double deltaY = Endpunkt.getY() - Startpunkt.getY();
Vector2D vector = new Vector2D(deltaX, deltaY);
}
Code:
//Klasse Constants
public class Constants {
/**
* The screen width in pixels
*/
public static final Integer SCREEN_WIDTH = 880;
/**
* The screen height in pixels
*/
public static final Integer SCREEN_HEIGHT = 750;
/**
* the application name
*/
public static final String APP_TITLE = "BreakOut";
/**
* Debugging flag for special rendering hints
*/
public static final boolean DEBUG_MODE = false;
/**
* The background color for the game menu
*/
public static final Color BACKGROUND = new Color(52, 152, 219);
/**
* Amount of columns for blocks
*/
public static final Integer SQUARES_X = 22;
/**
* Amount of the rows
*/
public static final Integer SQUARES_Y = 30;
/**
* The paddle width in pixels
*/
//public static final Integer PADDLE_WIDTH = 70;
public static Integer PADDLE_WIDTH = 500;
/**
* The paddle height in pixels
*/
//public static final Integer PADDLE_HEIGHT = 15;
public static Integer PADDLE_HEIGHT = 15;
/**
* The distance between paddle and the lower reflection offset.
*/
public static final Double REFLECTION_OFFSET = 25.0;
/**
* The ball diameter in pixels
*/
public static final Integer BALL_DIAMETER = 15;
/**
* The paddle speed
*/
public static final Double DX_MOVEMENT = 4.5;
/**
* The ball speed
*/
public static final Double BALL_SPEED = 1.2;
}