当前位置: 首页 > 知识库问答 >
问题:

如何在libgdx中移动背景屏?

莫英喆
2023-03-14

我正在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个答案

谭绍晖
2023-03-14

实现这一点的最佳方法是使用ParrallaxLayer和Parrallaxbackground类

它优化了后台操作,所以你不必担心性能

何长恨
2023-03-14

首先,你需要做的是改变一个bg变量,所以在render some中,我们要做这样的事情:

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;
 类似资料:
  • 我有一个用WASD控制的相机,但是我一直在左右移动它。我一直在网上寻找,它说要找到一个垂直于另一个向量的向量,你改变x和y的圆,并将其中一个乘以-1。我在下面的代码中尝试过这个: 我一直在向前移动,工作得很好,实际上是在转动相机,但由于某些原因,这不起作用,老实说,我不确定它到底是做什么的,因为当我按下或(他们称之为该功能)时,相机会发疯,开始非常快速地转动,有时会向前移动,或者像100万英里以外

  • 我在Java和Slick2D方面有几年的经验,我正试图将一个游戏移植到libgdx,因为它是一个更好的库。然而,我有一个简单的问题在屏幕上移动精灵。这个应用编程接口一定有一些我不理解的范例。我将我的代码提炼成以下内容。它识别输入,并在我的整个实体和网络系统中运行它,无论是在服务器上还是从服务器上,但是精灵保持在同一个位置。任何帮助都会很棒。 我的create()方法: getCurrentX/Y方

  • 很抱歉最近问了这么多问题。我刚刚开始进入pyplay。关于我之前的问题,我认为我没有把它用在我想做的事情上。 这是我做的一张快速图片来演示 这是我想让玩家移动的单一背景图像或地图。红色的X只是角色的开始。我试着让它当我移动玩家时,背景也会跟随,就像玩家在地图上移动一样。我已经限制了玩家不能离开实际屏幕的边界。只是有一点麻烦,现在试图让它这样的单一图像将沿着玩家移动,如果玩家到达地图图片移动停止。我

  • 公共视图onCreateView(LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){ 但是它崩溃了,错误日志如下所示: 是 我已经在中为添加了init,如下所示: 我的场景是: Activity1-->Activity1-->片段 Splash的XML如下所示: 我有两项活动。片段由activity2调用,我想改变Acti

  • 如何在css中设置固定背景并滚动???而且我一直试图设置一个背景来覆盖所有维度,因为我总是以模糊的背景结束:( 我在这方面相对较新,所以请不要评判我,这是我的css:body#bg{宽度:100%;高度:100%;位置:绝对;左:0px;顶部:0px;z-index:0;背景附件:固定; }

  • 我正在开发一个Android游戏,使用Eclipse中的libGDX。我想加快我的场景(跑步机),每当一个球员得了10分。跑步机的初始速度等于0,每10分累加5。当角色掉出屏幕时,玩家就输掉了游戏。有人知道怎么做吗?

  • 问题内容: 我正在尝试将背景图像设置为延伸到的宽度和高度的整个范围。该会是可变大小的,所以我用 我无法弄清楚如何将其放在这种简写形式中并使之起作用。如果我独立列出每个属性,则可以正常工作,但是我希望有一个多合一的解决方案。 这可行,但不是首选: 问题答案: 根据W3和MDN,需要使用斜线将背景大小与背景位置分开: W3C示例: MDN: 必须在背景位置之后指定此属性,并用’/’字符分隔。