如何在libgdx中移动背景屏幕?

时间:2013-06-15 13:49:19

标签: java libgdx

我正在Libgdx制作一个游戏,在这个游戏中,我希望从一个单词到一个单词,然后向后移动单词并根据它更新相机。我的代码如下......

    public WorldRenderer(SpriteBatch spriteBatch, World world){
  this.world = world;
  this.camera = new OrthographicCamera(FRUSTUM_WIDTH, FRUSTUM_HEIGHT);
  this.camera.position.set(FRUSTUM_WIDTH/2, FRUSTUM_HEIGHT/2, 0);
  this.spriteBatch = spriteBatch;
  positionBGY1 = 0;
  positionBGY2 = 0;

 }
 public void render(World world, float deltaTime){
  if(world.ball.position.y > - camera.position.y){
    camera.position.y = world.ball.position.y;

  }

  if(camera.position.y<0)
   camera.position.y=world.ball.position.y;

  camera.update();
  spriteBatch.setProjectionMatrix(camera.combined);
  renderBackground();
  renderObjects(world, deltaTime);
 }


 private void calculateBGPosition(){
  positionBGY2 = positionBGY1 + (int)FRUSTUM_HEIGHT;
  if(camera.position.y >= positionBGY2){
   positionBGY1 = positionBGY2;
  }
 }
 private void renderBackground() {
  spriteBatch.disableBlending();
  spriteBatch.begin();
  spriteBatch.draw(Assets.gamebackgroundRegion, camera.position.x - FRUSTUM_WIDTH / 2, positionBGY1 - FRUSTUM_HEIGHT / 2, FRUSTUM_WIDTH, 1.5f * FRUSTUM_HEIGHT);
  spriteBatch.draw(Assets.gamebackgroundRegion2, camera.position.x - FRUSTUM_WIDTH / 2, positionBGY2 - FRUSTUM_HEIGHT / 2, FRUSTUM_WIDTH, 1.5f * FRUSTUM_HEIGHT);
  calculateBGPosition();
  spriteBatch.end();
  }

我的代码问题是背景屏幕没有移动,相机没有通过球移动更新,球从屏幕上掉下来。

2 个答案:

答案 0 :(得分:1)

那么,你需要做的第一件事就是改变一个bg变量,所以在渲染中我们会做类似的事情:

float speed = 1;
positionBGY1+=deltaTime*speed;
positionBGY2+=deltaTime*speed;

对于随球移动的相机,我会这样做:

camera.position.y = Math.min(ball.y,0);

我反过来会省略所有这些:

if(world.ball.position.y > - camera.position.y){
    camera.position.y = world.ball.position.y;
}

if(camera.position.y<0)
    camera.position.y=world.ball.position.y;

答案 1 :(得分:0)

实现这一目标的最佳方法是使用ParrallaxLayer和ParrallaxBackground类

它优化了后台操作,因此您不必担心性能