我需要让我的游戏背景一直向上移动..
我知道我需要使用一些线程将变量添加到图像的'y'坐标
我尝试做某事但是当它开始移动时所有的背景都出于某种原因,不能理解为什么......
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);
}
答案 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;
}