如何防止我的相机在 LibGDX 中延迟?
How do I prevent my camera from being delayed in LibGDX?
我正在尝试在 LibGDX 中制作一个移动系统,其中所有内容都以 5 像素的增量移动,我猜是为了让它看起来更像素化。我目前一次将玩家移动 5 个像素,然后移动相机以匹配玩家的位置,让他始终出现在屏幕上。这是我用来执行此操作的代码(每次调用渲染时 运行s):
Vector2 newCoordinates = MovementUtilities.getIncremented(x, y);
cam.position.set(newCoordinates.x, newCoordinates.y, 0);
batch.draw(texture, cam.position.x-15, cam.position.y, width, height);
MovementUtilities.getIncremented() 的代码:
public static final int INCREMENT = 5;
public static Vector2 getIncremented(int x, int y) {
return new Vector2(x-(x % INCREMENT), y-(y % INCREMENT));
}
但是,当我尝试 运行 它时,会发生这种情况:
https://youtu.be/C_r0mOaxJgU
播放器好像在抖动,好像镜头跟不上他什么的。
有人知道发生了什么事吗?我错过了什么吗?
您可以试试这样的方法,让我知道它对您的效果如何。
// initialize with your beginning position if you'd like.
private float x, y;
// initialize with your beginning position if you'd like.
private final Vector2 coordinates = new Vector2(x, y);
private final float moveSpeed = 5.0f;
public void function() {
getNewPosition();
cam.position.set(coordinates.x, coordinates.y, 0.0f);
cam.update();
// draw
}
public void getNewPosition() {
coordinates.set(x - moveSpeed, y - moveSpeed);
}
您也可以尝试从凸轮位置 X 移除 -15
部分,看看会发生什么。
你正在更新相机的内部位置,但没有告诉相机更新视图矩阵,我猜这一定是在其他地方不规则地发生,所以视觉上不同步。
如果更改相机参数,请更新视图矩阵(视图如何转换为屏幕)。
把这个放在你的 setPosition
之后
cam.update();
我正在尝试在 LibGDX 中制作一个移动系统,其中所有内容都以 5 像素的增量移动,我猜是为了让它看起来更像素化。我目前一次将玩家移动 5 个像素,然后移动相机以匹配玩家的位置,让他始终出现在屏幕上。这是我用来执行此操作的代码(每次调用渲染时 运行s):
Vector2 newCoordinates = MovementUtilities.getIncremented(x, y);
cam.position.set(newCoordinates.x, newCoordinates.y, 0);
batch.draw(texture, cam.position.x-15, cam.position.y, width, height);
MovementUtilities.getIncremented() 的代码:
public static final int INCREMENT = 5;
public static Vector2 getIncremented(int x, int y) {
return new Vector2(x-(x % INCREMENT), y-(y % INCREMENT));
}
但是,当我尝试 运行 它时,会发生这种情况: https://youtu.be/C_r0mOaxJgU 播放器好像在抖动,好像镜头跟不上他什么的。
有人知道发生了什么事吗?我错过了什么吗?
您可以试试这样的方法,让我知道它对您的效果如何。
// initialize with your beginning position if you'd like.
private float x, y;
// initialize with your beginning position if you'd like.
private final Vector2 coordinates = new Vector2(x, y);
private final float moveSpeed = 5.0f;
public void function() {
getNewPosition();
cam.position.set(coordinates.x, coordinates.y, 0.0f);
cam.update();
// draw
}
public void getNewPosition() {
coordinates.set(x - moveSpeed, y - moveSpeed);
}
您也可以尝试从凸轮位置 X 移除 -15
部分,看看会发生什么。
你正在更新相机的内部位置,但没有告诉相机更新视图矩阵,我猜这一定是在其他地方不规则地发生,所以视觉上不同步。 如果更改相机参数,请更新视图矩阵(视图如何转换为屏幕)。
把这个放在你的 setPosition
cam.update();