Obiekt kulki Java nie odbija się od narysowanych prostokątów, jak powinien.
Przepraszam za okropny tytuł. Cel apletu Java jest taki: piłka odbija się po ekranie. Rozmiar i prędkość tej piłki można zmienić za pomocą pasków przewijania. Użytkownik może nacisnąć i przeciągnąć myszą na ekranie, aby narysować prostokąty. Piłka również odbija się od tych prostokątów. Granice tych prostokątów są przechowywane w wektorze. Po kliknięciu prostokąta (i wszystkie pozostałe prostokąty w tym punkcie) są usuwane z wektora (i ekranu).
Problem, który mam, jest dwojaki: po pierwsze, gdy klikam prostokąt, aby go usunąć, nie jest usuwany, ale można go rozwiązać później.
Dwa: Piłka nie odbija się od prostokątów tak, jak powinna. Kiedy rysuję prostokąt w tym samym rzędzie lub kolumnie, co piłka, piłka odbija się w środku małego prostokąta, tak jakby został zablokowany.
Oto mój kod do wykrywania, czy piłka uderza w granice apletu lub dowolnego prostokąta:
public void move()
{
//if it will hit the right or left boundary, flip the x direction and set it
if (loc.x+size >= boundx || loc.x <= 0)
{ dx *= -1; }
//if it will hit the top or bottom boundray, flip the y direction and set it
if (loc.y+size >= boundy || loc.y <= 0)
{ dy *= -1; }
for (int i = 0; i < r.size(); i++)
{
temp = new Rectangle(r.elementAt(i));
int rx = temp.x;
int ry = temp.y;
int rh = temp.height;
int rw = temp.width;
//If the ball hits either side of the rectangle, change the x direction
if((loc.x > rx && loc.x > ry && loc.x < (ry + rh))||(loc.x < (rx + rw) && loc.x > rx && loc.x <(ry + rh)))
{dx *= -1;}
//If the ball hits either the top or bottom, change the y direction
if((loc.y > ry && loc.y > rx && loc.y < (rx + rw))||(loc.y < (ry + rh) && loc.y > ry && loc.y <(rx + rw)))
{dy *= -1;}
}
//Increment or decrement the location of the ball based on the X and Y directions.
loc.x += dx;
loc.y += dy;
}
Jeśli chcesz wyświetlić kod w całości, to jest tutaj:http://ideone.com/R1hpBx
Z góry dziękuję za wspaniałą pomoc.