滚动背景,JAVA

时间:2014-04-29 15:53:13

标签: java canvas awt thread-sleep

我需要让我的游戏背景一直向上移动..

我知道我需要使用一些线程将变量添加到图像的'y'坐标

我尝试做某事但是当它开始移动时所有的背景都出于某种原因,不能理解为什么......

图片:streaking background

public class Background {
private BufferedImage image;
.....
....

public Background(int x, int y) {
    this.x = x;
    this.y = y;

    // Try to open the image file background.png
    try {
        BufferedImageLoader loader = new BufferedImageLoader();
        image = loader.loadImage("/backSpace.png");

    }
    catch (Exception e) { System.out.println(e); }

}

/**
 * Method that draws the image onto the Graphics object passed
 * @param window
 */
public void draw(Graphics window) {

    // Draw the image onto the Graphics reference
    window.drawImage(image, getX(), getY(), image.getWidth(), image.getHeight(), null);

    // Move the x position left for next time
    this.y +=1 ;
}


public class ScrollingBackground extends Canvas implements Runnable {

// Two copies of the background image to scroll
private Background backOne;
private Background backTwo;

private BufferedImage back;

public ScrollingBackground() {
    backOne = new Background();
    backTwo = new Background(backOne.getImageWidth(), 0);

    new Thread(this).start();
    setVisible(true);
}

@Override
public void run() {
    try {
        while (true) {
            Thread.currentThread().sleep(5);
            repaint();
        }
    }
    catch (Exception e) {}
}

@Override
public void update(Graphics window) {
    paint(window);
}

public void paint(Graphics window) {
    Graphics2D twoD = (Graphics2D)window;

    if (back == null)
        back = (BufferedImage)(createImage(getWidth(), getHeight()));

    Graphics buffer = back.createGraphics();

    backOne.draw(buffer);
    backTwo.draw(buffer);

    twoD.drawImage(back, null, 0, 0);

}

1 个答案:

答案 0 :(得分:1)

你不需要一个新的线程,在这种情况下只会使事情过于复杂。 您只需要继续向背景的Y坐标添加一个因子。 例如:

float scrollFactor = 0.5f; //Moves the background 0.5 pixels up per call of the draw method

public void draw(Graphics window) {

    window.drawImage(image, getX(), getY(), image.getWidth(), image.getHeight(), null);

    this.y += scrollFactor;
}