libGDX:如何让世界移动

问题描述:

我是libgdx的新手,在简单的2D游戏上工作,我希望我的box2d世界(或背景)随着输入触摸移动(当我按下按钮时向上移动)但我不知道如何移动世界并将我的球员放在中心位置。我想知道:libGDX:如何让世界移动

  1. 如何通过输入控件移动我的世界。
  2. 将我的播放器置于*。

而且它看起来像我的玩家每当我玩那个游戏,而不是世界时都在移动。 如果你只能提供你的答案的例子。

所以,这里是我的代码

public void show() { 
     world = new World(new Vector2(0, 25), true); 
     renderer = new Box2DDebugRenderer(); 
     cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     /* cam.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2, 0); 
     cam.update();*/ 


     shapeRenderer = new ShapeRenderer(); 

     batch = new SpriteBatch(); 
     texture = new Texture("img/imgs.png"); 
     sprite = new Sprite(texture); 
     sprite.setSize(10, 10); 
     sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
     sprite.setPosition(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2); 
     //sprite.setBounds(200, 200, 64, 64); 
     //sprite.setPosition(Gdx.graphics.getWidth()/2 -sprite.getWidth()/2, Gdx.graphics.getHeight()/2-sprite.getHeight()/2); 


     /* //Body definition 
     BodyDef bodyDef = new BodyDef(); 
     bodyDef.type = BodyDef.BodyType.DynamicBody; 
     bodyDef.position.set(0, Gdx.graphics.getHeight()/2 - 250); 

     box = world.createBody(bodyDef); 

     //Polygon Shape 
     PolygonShape shape = new PolygonShape(); 
     shape.setAsBox(10, 20); 


     //fixture definition 
     FixtureDef fixtureDef = new FixtureDef(); 
     fixtureDef.shape = shape; 
     fixtureDef.density = 5f; 
     fixtureDef.friction = .5f; 

     box.createFixture(fixtureDef); 

     box.setUserData(sprite); 

     shape.dispose(); 

*/ } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     world.step(1/60f, 6, 2); 
     cam.translate(0, 12); 
     cam.update(); 
     batch.setProjectionMatrix(cam.combined); 

     if(Gdx.input.isKeyPressed(Input.Keys.A)) 
      spriteY += Gdx.graphics.getDeltaTime() * spriteSpeed; 
     if(Gdx.input.isKeyPressed(Input.Keys.D)) 
      spriteY += Gdx.graphics.getDeltaTime() * sprite1Speed; 



     batch.begin(); 
     batch.draw(sprite, spriteX, spriteY); 
     batch.end(); 

     shapeRenderer.setColor(Color.RED); 
     shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); 
     shapeRenderer.rect(0, 200, 50, 50); 
     shapeRenderer.translate(1, 0, 0); 
     shapeRenderer.end(); 


    } 

    @Override 
    public void resize(int width, int height) { 
     cam.viewportWidth = width; 
     cam.viewportHeight = height; 
     cam.update(); 


    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 
     dispose(); 
    } 

    @Override 
    public void dispose() { 
     //world.dispose(); 
     shapeRenderer.dispose(); 
     batch.dispose(); 


    } 

} 

对不起,乱七八糟(我是新手)的代码,我想,我的世界输入控件向上移动,我的精灵只是放置在中心。 预先感谢您。

你的问题听起来像你想创造一个平台或有点。

我要让你知道,最好的方式来建立你创建(2D)成熟的游戏时,在逻辑上是你的性格应该始终保持它的位置相同,背景和其他固体物体应移动朝玩家(基于输入控件或自动),让玩家看起来像是自然而然地移动,背景物体会以他的方式出现。

我的答案很一般,因为你的问题相当一般。如果您需要代码,您必须向我们提供代码,以便我们知道您卡在哪里。祝你好运:)

+0

将玩家置于中心是一个抽象问题,因为它取决于你绘制对象/纹理的方式。一个简单的谷歌或YouTube的搜索不会伤害,因为你可以很容易地找到很多有用的初学者教程。 –

+1

你为什么要那样做?您必须移动世界上的所有对象而不是一个对象。除了玩家本身之外,没有任何静态的物理体。我能想到的唯一情况就是在一个无限的,渐进的阶段,在这个阶段,一次只能存在一条条的世界,而当玩家远离原点时,你不想开始失去精确性。 – Tenfour04

+0

@ Tenfour04是的,这是关于无限的滚动,但不只是。你谈论的物体只能是2-3个物体,它们总是在视觉区域重新生成,让人感觉它是一个新的障碍物,但它只是你在几秒前通过的物体。让角色完全不改变他的相对位置,就排除了许多条件和事实,您应该检查以便进行背景滚动/重复。 –