当前位置: 首页 > 知识库问答 >
问题:

如何在LibGDX中左右移动相机

楚鸿波
2023-03-14

我有一个用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(他们称之为该功能)时,相机会发疯,开始非常快速地转动,有时会向前移动,或者像100万英里以外。不管怎样,有人知道我该怎么做吗?顺便说一句,我还尝试了获取相机的前进方向,并使用。rotate()函数将其向右/向左旋转90度,然后以这种方式进行平移,但效果相同。我在想,也许相机的工作原理与其他东西在横向/反向翻译时的工作原理不同。

共有2个答案

洪知
2023-03-14

首先,在您的类中,您必须有一个动画对象,让我们称之为Anim。在您的类实例化中,您必须创建一个OrthograicCamera对象,这将是您的相机实例。您必须给它一个值,例如:

camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

这个摄像头可以在您第一次使用它时设置,您可以使用方法进行设置。translate()

camera.translate(camera.viewportWidth / 2, camera.viewportHeight);

否则,位置将设置为0;0

render()方法中,必须使用camera对象中名为update()的方法,如下所示:

@Override
public void render(float delta) {
    anim.load();
    camera.update();
    ....
    game();
    ....
}

此方法在您开发的游戏/应用程序中始终运行。因此,每次该方法运行时,摄像头都会更新,其位置也会更新。

然后,在处理用户输入的game()方法或其他方法(取决于您的架构)中,移动相机的位置,并修改相机。将放入其中。比如贝娄:

 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. 
   }

当用户移动时,将调用移动方法,并修改相机位置。每次调用方法render()时,相机将更新其新位置。

墨承泽
2023-03-14

要存档两个矢量之间的摄像机移动,请使用摄像机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

            [...]



            }
 类似资料:
  • 本文向大家介绍.net中实现listBox左右移动,包括了.net中实现listBox左右移动的使用技巧和注意事项,需要的朋友参考一下 今天用到listbox左右移动在网上找了一个,网友分享出来的,感觉不错,这里推荐给大家 以上所述就是本文的全部内容了,希望对大家熟练使用listbox能够有所帮助。

  • 本文向大家介绍如何禁止移动端的左右划动手势?相关面试题,主要包含被问及如何禁止移动端的左右划动手势?时的应答技巧和注意事项,需要的朋友参考一下 参考文章

  • 我在我的游戏中使用了基于网格的碰撞检测,除了一件事外,其他一切都在运行,当玩家在瓷砖上向左移动时,他从瓷砖中跌落。之所以会发生这种情况,是因为当向左然后向右移动时,网格点更新得更快,因为玩家的网格位置基于坐标移动。例如:如果玩家在100,他将不会更新,直到他达到150,单元格范围是100-150(单元格大小是50),但如果你向左移动,你将在99,其中包括在50-100单元格区域。这里有一张图片可以

  • 我正在尝试做一个简单的游戏,在游戏中,当按钮被点击时,一条船从一个海岸驶向另一个海岸。我尝试使用jQuery,但它没有像预期的那样工作。 哈巴狗 萨斯 jQuery 问题是当船回到起始位置时,它会比原来的位置走得更远。 有谁能帮帮我吗? 代码笔链接

  • 我在Java和Slick2D方面有几年的经验,我正试图将一个游戏移植到libgdx,因为它是一个更好的库。然而,我有一个简单的问题在屏幕上移动精灵。这个应用编程接口一定有一些我不理解的范例。我将我的代码提炼成以下内容。它识别输入,并在我的整个实体和网络系统中运行它,无论是在服务器上还是从服务器上,但是精灵保持在同一个位置。任何帮助都会很棒。 我的create()方法: getCurrentX/Y方

  • 我正在尝试为我的RecolyerView添加滑动功能。我正在跟随这个链接添加刷卡。https://github.com/nikhilpanju/recyclerviewenhanced/blob/master/recyclerviewenhanced/src/main/java/com/nikhilpanju/recyclerviewenhanced/recyclertouchlistener.j