gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:02 25 4
gpt4 key购买 nike

我刚开始玩 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com