Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX-Camera.update()调用不执行任何操作_Java_Android_Camera_2d_Libgdx - Fatal编程技术网

Java LibGDX-Camera.update()调用不执行任何操作

Java LibGDX-Camera.update()调用不执行任何操作,java,android,camera,2d,libgdx,Java,Android,Camera,2d,Libgdx,我刚开始玩LibGDX,我的相机已经有问题了 我在网上看到一些图图,如果我理解的很好的话,它告诉我,在使用LibGDX的2D游戏中,你必须重新计算你所有实体的位置(我是指屏幕上的每一个实体),包括速度等参数 对我来说,这意味着相机不动,但它所显示的世界。 我想做相反的事情,移动相机而不是世界,因为这对我来说更有意义,而且看起来更容易,因为我只需要移动相机,而不是所有的实体。所以我不希望世界移动,我的相机显示变化,但我的相机移动并显示变化。因此,即使某些实体不移动(它们的坐标x和y不变),它也会随

我刚开始玩LibGDX,我的相机已经有问题了

我在网上看到一些图图,如果我理解的很好的话,它告诉我,在使用LibGDX的2D游戏中,你必须重新计算你所有实体的位置(我是指屏幕上的每一个实体),包括速度等参数

对我来说,这意味着相机不动,但它所显示的世界。 我想做相反的事情,移动相机而不是世界,因为这对我来说更有意义,而且看起来更容易,因为我只需要移动相机,而不是所有的实体。所以我不希望世界移动,我的相机显示变化,但我的相机移动并显示变化。因此,即使某些实体不移动(它们的坐标x和y不变),它也会随着摄影机的移动而变化

因此,我有一个继承自
正交摄影机
摄影机
类和一个
实体
类。 我还有两个接口
PositionListener
PositionListenable
=>模式观察者

所以我想做的是:
-我的相机只“监听”我的一个实体(例如播放器)
-当我的实体移动时,它会使用其坐标(x,y)更新相机,并且我的相机会将其位置更改为x和y以跟随我的实体

下面是Camera.java中的代码:

public class Camera extends OrthographicCamera implements PositionListener {

    public Camera(float width, float height) {
        super(width, height);
    }

    @Override
    public void entityMoved(float newX, float newY) {
        translate(newX - position.x, newY - position.y);
        update();
        Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY);
        Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y);
}
}

当我阅读日志时,我看到
position.x
position.y
按照我预期的方式改变,以跟随我的实体,但从视觉上看,相机没有移动??一切看起来都一样,好像我的相机没有翻译

我的相机根本不动,只有我的实体

我错过了什么?我读了一些关于“viewPort”的文章,但由于我是LibGDX的初学者,所以没有真正理解它。

好的,这里是我如何使用它的。
以下是
entityMoved()
方法:

@Override
public void entityMoved(float newX, float newY) {
    translate(newX - position.x, newY - position.y);
    Gdx.app.log("entityMoved()", "newX=" + newX + " - newY=" + newY);
    Gdx.app.log("entityMoved()", "position.x=" + position.x + " - position.y=" + position.y);
在主循环中,
ApplicationListener的
render()
方法:

sprite.begin();
world.draw(sprite);
sprite.end();

camera.update();
sprite.setProjectionMatrix(camera.combined);
draw方法()还使实体移动,并通知其观察者摄影机。 然后我更新相机(不像以前那样使用自己的方法),然后只更新projectionmatrix。

有点滞后,但工作起来就像我想要的那样