#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.