LibGDX - Camera.update()方法调用无效

4
我刚开始使用LibGDX,但是已经遇到了一个与相机有关的问题。
我在网上看到一些教程,如果我理解正确的话,在使用LibGDX的2D游戏中,您需要重新计算所有实体(我的意思是屏幕上的每个元素)的位置,以速度等作为参数...
对于我来说,这意味着相机不会移动,而它所显示的世界会移动。 我想做相反的事情,移动相机而不是世界,因为这对我来说更有意义,并且看起来更容易,因为我只需要移动相机,而不是所有实体。因此,我不希望世界移动并且我的相机显示变化,而是希望我的相机移动并显示变化。所以即使有些实体不会移动(它们的坐标x和y不会改变),它们看起来就像相机移动了。
所以我有一个从OrthographicalCamera继承的Camera类和一个Entity类。 我还有两个接口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.xposition.y已经按照我的期望进行了更改,以跟随我的实体,但视觉上相机没有移动??一切看起来都和我的相机没有移动一样!

我的相机根本没有移动,只有我的实体移动了!
我错过了什么?我读到了关于“viewPort”的一些东西,但由于我是LibGDX的初学者,真的没有理解这个东西。

1个回答

3

好的,这里是我让它正常工作的方法。
这是 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);

在主循环中,ApplicationListenerrender() 方法:
sprite.begin();
world.draw(sprite);
sprite.end();

camera.update();
sprite.setProjectionMatrix(camera.combined);

draw() 方法也使我的实体移动,并通知它的观察者——摄像机。 然后我更新了摄像机(不再使用之前的方法),只更新投影矩阵。
有点卡顿,但效果符合我的期望!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接