我正在使用Java制作游戏,我希望背景图像从右向左移动。我想继续重复这样看起来就像玩家正在移动。
我在下面编写代码来执行此操作,但是它存在问题。图像将从右向左移动两次,但第三张图像不会出现。任何想法?
public void update() {
x -= dx;
}
public void draw(Graphics2D g) {
// 1st image
g.drawImage(image, (int) x, (int) y, GamePanel.WINDOW_WIDTH, GamePanel.WINDOW_HEIGHT, null);
// keep scrolling the image
// there will be two same bg image on screen
if (x < 0) {
g.drawImage(image, (int) x + GamePanel.WINDOW_WIDTH, (int) y, GamePanel.WINDOW_WIDTH, GamePanel.WINDOW_HEIGHT, null);
}
if (x > 0) {
g.drawImage(image, (int) x - GamePanel.WINDOW_WIDTH, (int) y, GamePanel.WINDOW_WIDTH, GamePanel.WINDOW_HEIGHT, null);
}
}// End of draw method
看起来x的值永远保持在十进制,所以我添加了这段代码,但仍有一部分缺少图像:
if(x+GamePanel.WINDOW_WIDTH < 0){
x = GamePanel.WINDOW_WIDTH;
}
答案 0 :(得分:1)
很简单。只需将两个图像放在一起,不要忘记在某个时刻重置x。
由于每张图像都与窗口一样宽,因此首先您只能看到第一张图像。然后它向左滚动,另一个图像从右侧滑入。滚动太多以至于只有第二张图像可见后,您可以切换回开头。 (我假设它是一个简单的平台滚动器,两个图像完全相同。)
|11111|
|11112|
|11122|
|11222|
|12222|
|11111| as above
在代码中:
public void update() {
x -= dx;
if (x<-GamePanel.WINDOW_WIDTH) {
x+=GamePanel.WINDOW_WIDTH;
// or reset to zero
}
}
public void draw(Graphics2D g) {
// 1st image
g.drawImage(image, (int) x, (int) y, GamePanel.WINDOW_WIDTH, GamePanel.WINDOW_HEIGHT, null);
// 2nd image right to 1st image
g.drawImage(image, (int) x + GamePanel.WINDOW_WIDTH, (int) y, GamePanel.WINDOW_WIDTH, GamePanel.WINDOW_HEIGHT, null);
}// End of draw method