Используя Dr.Java , хотите знать, как заставить элемент отскакивать

#java

#java

Вопрос:

Итак, у меня есть программа, которую я пытаюсь создать для класса, и мне нужно создать сельскую сцену с фермой и солнцем. Солнце должно подпрыгивать вверх и вниз. Текущая проблема, с которой я сталкиваюсь, заключается в том, что солнце продолжает садиться и не подпрыгивает. Вот мой код:

 import javax.swing.*;
import java.awt.*;
/**
 * Date: Oct 14, 2016
 * Author: 
 * Description: Shows a country side with a farm and a sun bouncing up and down.
 */
public class WeAreInThePictures extends JFrame
{
  ImageIcon sun, farm, bG; //assigns sun, farm and background to an image variable
  static int x = 0, y = -50; //starting position of the sun
  static int ySpeed = 10; //speed in y direction
  static double delay = 1.0;


  public WeAreInThePictures() { 
    super ("We Are In The Pictures!");
    setSize (852, 480);
    bG = new ImageIcon ("1.jpg");
    sun = new ImageIcon ("sun.png");
    farm = new ImageIcon ("farm.png");
setVisible (true);
  }

  public static void main(String[] args) { 
    new WeAreInThePictures ();
  }

  public void paint (Graphics g)
  {
    for (int i = 0; i < 1000; i  )
{
  bG.paintIcon (this, g, 0, 0);
  farm.paintIcon (this, g, 500, 50);

  y = y   ySpeed;
  if (ySpeed > 0)
  {
    sun.paintIcon (this, g, x, y);

    for (int j = 0; j < 550000; j  ) 
    {
      delay = Math.pow (delay, 1);
    }
  }
  else if (y > 50)
  {
    ySpeed = ySpeed - 1;
  }
  else if (y <= 0)
   {
     ySpeed = ySpeed - 1;
   }
  }
 }
}
  

Может кто-нибудь объяснить мне, что не так, как я должен это исправить и почему возникает проблема?

Ответ №1:

Ваша проблема в том, что вы, похоже, написали этот код, не просмотрев ни одно руководство по графике Swing или аналогичный вопрос на этом сайте, касающийся анимации Swing (почему?). Вы рисуете непосредственно в JFrame, чего вам делать не следует, у вас есть код мутации объекта в методе paint, опять же, чего вам не следует делать.

Вместо этого сделайте так, как вы рекомендовали в руководствах, и большинство других подобных вопросов на этом сайте, фактически, найдите проблему, прежде чем задавать:

  • Нарисуйте в методе paintComponent JPanel, который отображается в JFrame.
  • Используйте таймер переключения для цикла анимации
  • Измените направление скорости в ActionListener таймера, а не в методе paintComponent.