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.

questionAnswers(1)

yourAnswerToTheQuestion