我刚开始使用LibGDX,但是已经遇到了一个与相机有关的问题。
我在网上看到一些教程,如果我理解正确的话,在使用LibGDX的2D游戏中,您需要重新计算所有实体(我的意思是屏幕上的每个元素)的位置,以速度等作为参数...
对于我来说,这意味着相机不会移动,而它所显示的世界会移动。 我想做相反的事情,移动相机而不是世界,因为这对我来说更有意义,并且看起来更容易,因为我只需要移动相机,而不是所有实体。因此,我不希望世界移动并且我的相机显示变化,而是希望我的相机移动并显示变化。所以即使有些实体不会移动(它们的坐标x和y不会改变),它们看起来就像相机移动了。
所以我有一个从OrthographicalCamera继承的Camera类和一个Entity类。 我还有两个接口PositionListener和PositionListenable=>模式观察者。
所以我试图做的是: -我的相机“听取”我的实体之一(例如玩家) -当我的实体移动时,它会更新具有其坐标(x,y)的相机,并将其位置更改为x和y以跟随我的实体。
这是Camera.java中的代码:
我在网上看到一些教程,如果我理解正确的话,在使用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.x
和position.y
已经按照我的期望进行了更改,以跟随我的实体,但视觉上相机没有移动??一切看起来都和我的相机没有移动一样!
我的相机根本没有移动,只有我的实体移动了!
我错过了什么?我读到了关于“viewPort”的一些东西,但由于我是LibGDX的初学者,真的没有理解这个东西。