Итак, у вас есть:
private void initBall(Graphics2D graphics2d) {
int x = getPosX(), y = getPosY();
boolean backX = false;
boolean backY = false;
в начале, так что независимо от того, в каком направлении движется мяч, логические значения будочки каждый раз устанавливаются в false. Тогда у вас не будет «Else», когда дело доходит до установки опции возврата в
if (x < 1)
backX = false;
if (x > getWidth() - 50)
backX = true;
if (y < 1)
backY = false;
if (y > getHeight() - 50)
backY = true;
То, что происходит, - то, что шар движется в правильном направлении, пока он не ударит стену (я предполагаю верхнюю стенку). тогда это называется:
if (y > getHeight() - 50)
backY = true;
Итак, для этой итерации мяч возвращается из-за
if (!backY)
setPosY(++y);
else
setPosY(--y);
Но тогда вы сразу же установите его обратно в ложь. Я предлагаю вам 1013 *
private boolean backX = false; //same for backY
вне вашего метода.