Java 带动画的JPanel背景图像

Java 带动画的JPanel背景图像,java,jpanel,Java,Jpanel,我正在使用JPanel制作一个2d游戏,希望在前景中设置一个动画背景。我知道如何设置背景图像,但它超过了其他动画图像。有什么解决方案的建议吗 公共类游戏板扩展JPanel{ public final int EARTH_ORBIT_RADIUS = 200; public final int BOARD_WIDTH = 800; public final int BOARD_HEIGHT = 600; public final int INITIAL_EARTH_X = 700; public

我正在使用JPanel制作一个2d游戏,希望在前景中设置一个动画背景。我知道如何设置背景图像,但它超过了其他动画图像。有什么解决方案的建议吗

公共类游戏板扩展JPanel{

public final int EARTH_ORBIT_RADIUS = 200;
public final int BOARD_WIDTH = 800;
public final int BOARD_HEIGHT = 600;
public final int INITIAL_EARTH_X = 700;
public final int INITIAL_EARTH_Y = 300;
public final int INITIAL_DELAY = 100;
public final int PERIOD_DELAY = 30;
public final int SUN_COORDINATE_X = 500;
public final int SUN_COORDINATE_Y = 300;
public final int INITIAL_ASTEROID_X = 500;
public final int INITIAL_ASTEROID_Y = 100;

public int earth_x, earth_y;
public int asteroid_x, asteroid_y;
public int t = 0;
public int[] earthcoordinates;
public int[] asteroidcoordinates;
Image earth;
Image sun;
Image asteroid;
Image background;

Timer timer;


GameBoard(){

    initGameBoard();

    loadImage();

    earth_x = INITIAL_EARTH_X;
    earth_y = INITIAL_EARTH_Y;

    asteroid_x = INITIAL_ASTEROID_X;
    asteroid_y = INITIAL_ASTEROID_Y;

    timer = new Timer();
    timer.scheduleAtFixedRate(new ScheduledTask(), INITIAL_DELAY, PERIOD_DELAY);
}

void initGameBoard(){
    //setBackground(Color.BLACK);
    BackgroundPanel panel = new BackgroundPanel(background, BackgroundPanel.ACTUAL, 1.0f, 0.5f);
    add(panel);
    setPreferredSize(new Dimension(BOARD_WIDTH, BOARD_HEIGHT));
    setDoubleBuffered(true);

}

void loadImage(){
    ImageIcon earth_image_icon = new ImageIcon("earth.png");
    earth = earth_image_icon.getImage();

    ImageIcon sun_image_icon = new ImageIcon("sun.png");
    sun = sun_image_icon.getImage();

    ImageIcon asteroid_image_icon = new ImageIcon("asteroid.png");
    asteroid = asteroid_image_icon.getImage();

    ImageIcon bg_image_icon = new ImageIcon("bg_pr.png");
    background = bg_image_icon.getImage();



}

public void paintComponent(Graphics g){
    super.paintComponent(g);

    drawEarth(g);
    drawSun(g);
    drawAsteroid(g); 
    drawBackground(g);
}

void drawEarth(Graphics g) {

    g.drawImage(earth, earth_x, earth_y, this);
    Toolkit.getDefaultToolkit().sync();
}

void drawSun(Graphics g) {
    g.drawImage(sun, SUN_COORDINATE_X, SUN_COORDINATE_Y, this);
    Toolkit.getDefaultToolkit().sync();
}

void drawAsteroid(Graphics g) {
    g.drawImage(asteroid, asteroid_x, asteroid_y, this);
    Toolkit.getDefaultToolkit().sync();
}

void drawBackground(Graphics g){
    g.drawImage(background, 0, 0, null );
}

public class ScheduledTask extends TimerTask{

    @Override
    public void run() {
        OrbitCalculation oe = new OrbitCalculation();
        earthcoordinates = oe.earthOrbitCalculation(t);
        earth_x = earthcoordinates[0];
        earth_y = earthcoordinates[1];

        OrbitCalculation oa = new OrbitCalculation();
        asteroidcoordinates = oa.asteroidOrbitCalculation(t);
        asteroid_x = asteroidcoordinates[0];
        asteroid_y = asteroidcoordinates[1];

        t = t + 1 ;
        repaint();
    }   
}

}

移动
牵引地面(g)drawXXX
打电话之前,code>。非常感谢!现在很明显了哈哈哈