如何在LibGDX中左右移动相机

时间:2016-01-10 20:27:33

标签: java vector camera libgdx

我有一台我使用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));
}

我已经向前推进工作正常,实际上是将相机转过来,但由于某些原因这不起作用,说实话我不确定它的确是什么,因为当我按ad(他们称这个功能)相机变得疯狂,开始很快转身,有时前进或者像一百万英里的侧面。无论如何,有谁知道我怎么能做到这一点?顺便说一下,我也尝试了相机的前进方向并使用.rotate()功能将其向右/向左旋转90度,然后将其翻译成相同的方式。我想也许相机不能正常工作,就像其他事情一样,横向/反向翻译。

2 个答案:

答案 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. } 都会更新其新位置。