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

标签 java android camera 2d libgdx

我刚开始玩 LibGDX,已经遇到相机问题。

我在 Internet 上看到一些教程告诉我,如果我理解得很好的话,在使用 LibGDX 的 2D 游戏中,您必须重新计算所有实体(我的意思是屏幕上的每个实体)的位置,并考虑速度等参数。 ..

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

所以我有一个继承自 OrthographicalCameraCamera 类和一个 Entity 类。 我还有 2 个接口(interface) 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.xposition.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);

在主循环中,ApplicationListenerrender() 方法:

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

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

draw 方法 () 也使我的实体移动,并通知它的观察者是相机。 然后我更新相机(不是像以前那样使用它自己的方法)并只更新投影矩阵。

有点迟钝,但工作起来就像我想要的那样!

关于java - LibGDX - Camera.update() 调用不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672771/

相关文章:

java - 堆污染如何导致安全漏洞

android - 获取订阅信息时来自 Google Play Android Developer REST API 的错误 500

android - Corona SDK 的本地通知 (Android)

javascript - Windows 8 如何选择要初始化的相机

Android MediaStore.ACTION_IMAGE_CAPTURE Intent 返回空 data.getData()

SuiteClasses 语法的 Java JUnit 类数组

java - 如何获取格式为 AM/PM 的请求参数(小时)

ADT17 中带有外部库的 Android 测试项目

swift - 如何在 ARKit 中获取相机的前向 (LookAt) 向量?

java - SpringBoot OAuth2RestTemplate 重试请求