我刚开始玩 LibGDX,并且已经面临相机问题。
我在互联网上看到了一些 tutos,如果我理解得很好,在使用 LibGDX 的 2D 游戏中,您必须重新计算所有实体的位置(我的意思是屏幕上的每个实体)的位置,并考虑速度等参数......
对我来说,这意味着相机不会移动,而是它所展示的世界。我想做相反的事情,移动相机而不是世界,因为这对我来说更有意义,而且看起来更容易,因为我只需要移动相机,而不是所有实体。所以我不希望世界移动,我的相机显示变化,但我的相机移动并显示变化。因此,即使某些实体没有移动(它们的坐标 x 和 y 没有改变),它看起来就像相机移动一样。
所以我有一个Camera
继承自的类OrthographicalCamera
和一个Entity
类。我还有 2 个接口PositionListener
& PositionListenable
=> Pattern Observer。
所以我试图做的是:
- 我的相机只“听”我的一个实体(例如玩家)
- 当我的实体移动时,它用它的坐标(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 的初学者。