Добавьте в ваш код метод, который проверяет каждую из четырех граней шара по очереди, проверяя, столкнулась ли эта грань с кромкой окна. Если так, это должно изменить направление соответственно. Например, если шар двигался на северо-восток (↗), а верхний край достиг верхней части экрана, он изменил бы направление на юго-восток (↘), так что мяч, казалось бы, отскочил от края. (Помните, что если мяч попадет прямо в угол в диагональном направлении, два края могут ударить одновременно, заставив его отскочить прямо назад в противоположном диагональном направлении.)
Я не уверен, как получить четырекрая овала. У меня есть другие 4 направления (вверх, вниз, влево, вправо), но я не уверен, как обращаться с углами окна.
public void move()
{
//direction right
if(dir == 1)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y);
if(x>425)
{
dir = 2;
}
}
//direction left
if(dir == 2)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y);
if(x<0)
{
dir = 1;
}
}
//direction down
if(dir == 3)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x,y + 1);
if(y>425)
{
dir = 4;
}
}
//direction up
if(dir == 4)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x ,y - 1);
if(y<0)
{
dir = 3;
}
}
//direction bottom right corner
if(dir == 5)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y + 1);
}
//direction upper right corner
if(dir == 6)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x + 1,y - 1);
}
//direction bottom left corner
if(dir == 7)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y + 1);
}
//direction upper left corner
if(dir == 8)
{
int x = ball.getX();
int y = ball.getY();
ball.setLocation(x - 1,y - 1);
}
}
Наконец, обязательно вызывайте этот метод всякий раз, когда вы перемещаете мяч. Таким образом, после перемещения шарика на 1 пиксель в его текущем направлении, вы запускаете метод, чтобы проверить, не достиг ли он какого-либо края, и измените направление. В этот момент ваш мяч должен двигаться по экрану, рикошетируя по ходу.