相机不跟随我的播放器

时间:2015-09-02 02:30:39

标签: java libgdx

我看到很多问题与这些问题完全相同但答案相同,但它对我来说无效。我有一个玩家,他的位置矢量不断更新。我需要我的相机不断跟随我的球员位置。这是玩家类

    public void update(){


    //velocity.y += MainScreen.GRAVITY.y;
    velocity.x += MainScreen.GRAVITY.x;


    oldPosition = getGridPosition();

    position.x += velocity.x;
    position.y += velocity.y;


    if(oldPosition.x == getGridPosition().x){
        hasMoved = false;
        System.out.println("Hasn't moved");
        System.out.println("normX- " + position.x);
        System.out.println("oldX- " + oldPosition.x);
    }
    else{
        hasMoved = true;
        System.out.println("Has moved");
    }

    if(Gdx.input.isKeyPressed(Keys.A)){
        velocity.x -= 10 * Gdx.graphics.getDeltaTime();
    }
    else if(Gdx.input.isKeyPressed(Keys.D)){
        velocity.x += 10 * Gdx.graphics.getDeltaTime();
    }else
        velocity.x = 0;


}

我试图将相机位置设置为我的球员位置,但它不适合我。这是我的主渲染循环。

    public void render () {
    player.update();
    camera.position.set(player.getPosition(), 0);
    camera.update();
    mapGrid.update();
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    mapGrid.render(tmpRend);
    player.render(tmpRend);
}

我很丢失我不知道我做错了什么,这是我在创建方法中初始化相机的方法

   player = new Player();

    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.setToOrtho(false);
    //camera.position.set(MapGrid.MAP_WIDTH / 2, MapGrid.MAP_HEIGHT, 0);
    camera.position.set(player.getPosition(), 0);
    camera.zoom = 2f;
    camera.update();

    tmpRend = new ShapeRenderer();

    tmpRend.setAutoShapeType(true);
    tmpRend.setProjectionMatrix(camera.combined);

    input = new InputListener(camera);
    Gdx.input.setInputProcessor(input);

我是否已经看到了许多其他问题,我正在做他们所说的但是我的工作不起作用。这是一张图片,展示了会发生什么。Reference to game

我只是不知道为什么当我按照我被告知的一切时它不起作用。你能给我的任何帮助都将非常感激!

1 个答案:

答案 0 :(得分:0)

我认为您已经更新了错误的相机 - 您已经创建了它的实例,但它与程序的其他部分相关联?

使用 Scene2d 管理您的演员,视口和相机。你可以在这里阅读更多相关信息:

https://github.com/libgdx/libgdx/wiki/Scene2d

您正在创建新舞台,添加播放器(应该继承演员类),然后只需创建新的相机,只需获取当前舞台相机像

    stage.getCamera()

你应该在渲染中做的只是

    ...

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    this.viewport.update(this.screenWidth, this.screenHeight);
    this.stage.act();
    this.stage.draw();