我看到很多问题与这些问题完全相同但答案相同,但它对我来说无效。我有一个玩家,他的位置矢量不断更新。我需要我的相机不断跟随我的球员位置。这是玩家类
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);
我是否已经看到了许多其他问题,我正在做他们所说的但是我的工作不起作用。这是一张图片,展示了会发生什么。
我只是不知道为什么当我按照我被告知的一切时它不起作用。你能给我的任何帮助都将非常感激!
答案 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();