【问题标题】:libGDX: how to make a world to movelibGDX:如何让世界移动
【发布时间】:2016-07-30 18:05:58
【问题描述】:

我是 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();


    }

} 

对不起,代码中的混乱(我是新手),我希望我的世界通过输入控件向上移动,并且我的精灵刚刚放置在中心。 提前谢谢你。

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    您的问题听起来像是您想创建一个平台游戏。

    我会告诉您,在创建 (2d) 平台游戏时构建逻辑的最佳方法是您的角色应始终保持其位置不变,并且背景和其他实体对象应移动 em> 朝向玩家(基于输入控件或自动),因此让玩家看起来像是在自然移动,并且背景和对象以他的方式出现。

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

    【讨论】:

    • 将玩家置于中心也是一个抽象问题,因为它取决于您绘制对象/纹理的方式。简单的 google 或 youtube 搜索不会有什么坏处,因为您可以轻松找到许多有用的初学者教程。
    • 你为什么要那样做?您必须移动世界上的所有对象而不是一个对象。除了玩家本身之外,不可能有任何静态物理实体。我能想到的唯一可能有意义的情况是在一个无限的、渐进的阶段,一次只存在世界的一小部分,当玩家远离原点时,你不想开始失去精确度。
    • @Tenfour04 是的,这与无限滚动有关,但不仅如此。你谈论的物体只能是 2-3 个物体,它们总是在视觉区域重生,给人的感觉是那里是一个新的障碍,但它只是你几秒钟前通过的那个。让角色完全不改变他的相对位置排除了许多你应该检查以使背景滚动/重复的条件和事实。
    • 现在我正在提供代码,是的,我正在尝试制作一个无限平台游戏
    • 好的,所以你希望世界向上移动并且玩家中心对齐。到目前为止你得到了什么?
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多