我有一台我使用WASD控制的相机,但是我坚持左右移动它。我一直在寻找互联网,它说要找到一个垂直于另一个的向量,你可以改变x和y的轮次,并将其中一个乘以-1。我在下面的代码中试过这个:
void camstrafe (String dir) {
Vector3 direction = camera.direction.nor();
Vector3 old = direction;
direction.set(-old.z, 0, old.x);
camera.translate(direction.scl(0.18f));
}
我已经向前推进工作正常,实际上是将相机转过来,但由于某些原因这不起作用,说实话我不确定它的确是什么,因为当我按a
或d
(他们称这个功能)相机变得疯狂,开始很快转身,有时前进或者像一百万英里的侧面。无论如何,有谁知道我怎么能做到这一点?顺便说一下,我也尝试了相机的前进方向并使用.rotate()
功能将其向右/向左旋转90度,然后将其翻译成相同的方式。我想也许相机不能正常工作,就像其他事情一样,横向/反向翻译。
答案 0 :(得分:2)
要在2个矢量之间存档相机移动,请使用相机lerp:
public class myclass {
[...]
private OrthographicCamera camera;
public Vector3 posCameraDesired;
[...]
private void processCameraMovement(){
/// make some camera movement
posCameraDesired.x+=100.0f * Gdx.graphics.getDeltaTime();
posCameraDesired.y+=100.0f * Gdx.graphics.getDeltaTime();
}
[...]
//render method
public void draw(){
[...]
processCameraMovement();
camera.position.lerp(posCameraDesired,0.1f);//vector of the camera desired position and smoothness of the movement
[...]
}
答案 1 :(得分:1)
首先,在你的班级中,你必须拥有一个Animations对象,让我们称之为Anim。在类实例中,您必须创建一个OrthographicCamera
对象,它将是您的相机实例。你必须给它一个值,例如:
camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
这个camera
坐标可以在您第一次使用时进行设置,您可以使用方法.translate()
进行设置:
camera.translate(camera.viewportWidth / 2, camera.viewportHeight);
否则positio将设置为0; 0。
在render()
方法中,您必须使用名为camera
的{{1}}对象中的方法,如下所示:
update()
此方法始终在您开发的游戏/应用中运行。因此,每次该方法运行时,@Override
public void render(float delta) {
anim.load();
camera.update();
....
game();
....
}
都会更新,其位置也会更新。
然后,在您的camera
方法或其他方法(取决于您的架构)中,在处理用户输入的位置,移动摄像机的位置,并修改{{ 1}}在里面。像贝娄:
game()
当用户移动时,调用移动方法,并修改摄像机位置。每次调用方法camera.position
时, public void game() {
if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) { // or A
moveBack(anim); // The method to move back
camera.position.x -= 3; // if conditions are ok, move the camera back.
} else if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) { or D
moveForward(anim); // The method to move forward
camera.position.x += 3; // if conditions are ok, move the camera to the front.
}
都会更新其新位置。