繁体   English   中英

libGDX:如何使世界动起来

[英]libGDX: how to make a world to move

我是libgdx的新手,正在开发一个简单的2d游戏,我希望我的box2d世界(或背景)随着输入触摸(当我按下按钮时向上移动)移动,但是我不知道如何移动世界并将我的播放器放在中央。 我想知道:

  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)平台游戏时,建立逻辑的最佳方法是您的角色应始终保持其位置不变,并且背景和其他实体应朝向玩家移动 (基于输入控件)或自动),以使您的播放器看起来自然移动,并且背景和对象以他的方式出现。

我的回答很笼统,因为您的问题很笼统。 如果您需要代码,则必须向我们提供代码,以便我们知道您遇到了什么问题。 祝好运 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM