水平的无尽背景

时间:2012-06-18 09:59:28

标签: game-engine slick2d

你可以请一下这个级别的无尽背景吗?

我目前正在使用slick2d编写原始游戏,游戏玩法类似于马里奥。

我有两张图片 - img1和img2(均为1280x480,而屏幕分辨率为640x480)。 最初,img2的X是==(img1的X + img1的宽度)。即它粘在img1的末端。 当img1超出左侧屏幕边框时,它的X坐标变为img2X + imgWidth。

这个逻辑对我来说很合适,但有时候图片会被过度攻击(很多,大约是屏幕的1/4)。 逻辑上有错误吗?方法是否良好?也许还有更简单正确的方法吗?

伪代码如下所示:

class BkgDrawer {


Image img1 = new Image("imgs/background/bkg1.png");
Image img2 = new Image("imgs/background/bkg2.png");

int img1Width = img1.getWidth(); //1280
int img2Width = img2.getWidth(); //1280
int screenResolution = game.getResolution; //640

Vector2f position1 = new Vector2f (0,0);
Vector2f position2 = new Vector2f (position1.x+img1.getWidth(), 0); //initially position2 is glued to the end of img1

public void render(    ) {
  if (position1.x + img1Width < 0) { //the img is over the left border of the screen
      position1.x = position2.x + img2Width; //glue it to the end of  img2
  }
//the same for the img2
  if (position2.x + img2Width < 0) { //the img is over the left border of the screen
      position2.x = position1.x + img2Width; //glue it to the end of  img2
  }
  img1.draw(position1.x, position1.y);
  img2.draw(position2.x, position2.y);
  //move coordinate to get the background moving.
  position1.x -= MOVING_STEP;
  position2.x -= MOVING_STEP;
  }
}

很抱歉有很多文字和感谢

1 个答案:

答案 0 :(得分:0)

我发现只有一个错误,如果两个图像的宽度不同,它只会产生影响:你的两个if语句使用相同的宽度img2Width

您可能已经注意到,您有重复的代码来处理每个背景的渲染和重新定位。我建议您将背景代码重构为Background类,其中包含通过MOVING_STEP重新定位背景图像,位置和更新方法。你会避免像我上面提到的那样的错误。