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

Libgdx Box2d身体在线性方向移动?

穆仲卿
2023-03-14

我制作了一个身体,我想在点击按钮时移动它,我已经能够使用body来移动身体。setLinearVelocity()但它不准确。假设我想以40的线速度移动我的身体7米,我该怎么做?

//BODY MOVEMENT
//timer = I try to move the body for a certain amount of time
/*isMoveRight and isMoveLeft are Just booleans for activating and deactivating movement*/
        if(Gdx.input.isKeyJustPressed(Input.Keys.RIGHT)){
            timer = 0f;
            isMoveRight = true;
            isMoveLeft = false;
        }else if(Gdx.input.isKeyJustPressed(Input.Keys.LEFT)){
            timer = 0f;
            isMoveLeft = true;
            isMoveRight = false;
        }

        if(isMoveRight == true && timer < 0.1f){
            timer += 1f * delta;   //activate timer
            body.setLinearVelocity(52f, 0f);
        }else if(isMoveLeft == true && timer < 0.1f){
            timer += 1 * delta;
            body.setLinearVelocity(-52f, 0f);
        }

我可以用身体。setTransform()但我需要身体真正移动,而不是传送。提前谢谢

共有1个答案

姚海
2023-03-14

我不知道你的代码样本有多完整,但是从我在这里看到的来看,你至少错过了0.1秒后将速度重置为0的部分。

else {
    body.setLinearVelocity(0F, 0F);
}

除此之外,你的方法在移动距离上有点模糊,因为取决于你的帧速率,你的检查计时器

timer = 0.099 -> distance = 5.148
timer = 0.132 -> distance = 6.881 (one frame later with 30 frames/second)

一些(未经测试的)想法如何处理这个问题:

  1. 使用Rope关节强制执行物体和起点之间的最大距离(在这种情况下也必须是物体)
  2. 测量距离(使用Vector2类),如果需要,将其传送回最大距离点。(无论如何,您应该使用距离而不是计时器)
  3. 如果你的身体接近目标就放慢速度,这至少有助于减少误差

 类似资料:
  • 我想再写一个像Flappy Bird这样的游戏。所以,我有一个身体,与鸟,并设置他的位置在开始在屏幕中部与精灵在上面。现在当用户点击屏幕时,我想把鸟向上移动。但我怎样才能做到呢?身体setTransform(向量、角度)不是我想要的。你能帮我解决这个问题吗?

  • 我正在开发一个应用程序,在一个xml文件中有两个线性布局。开始时,一个线性布局设置为不可见。当用户按下按钮时,可见的线性布局应向下滑动90%,并显示第二个线性布局。我编写了动画文件,并使其运行良好。我的问题是,在动画之后,视图会回到原来的状态。如何向下移动第一个线性布局以显示第二个线性布局?有什么帮助吗? 主活动文件: } XML文件:

  • 我是的新手。我正在努力用触碰让身体移动,一旦触碰被释放,它就必须停止移动!!使用KeyUp和KeyDown可以很好地工作,但我不知道如何使用touch实现。 这是我的密码。我是作为一门独立的课写的。下面是课程: 这是我的密码。我试着触地得分。我试图通过设定一定的速度来移动身体,但没有发生预期的结果。我不能用触摸来移动这个物体(多边形)。请帮忙。提前谢谢

  • 我刚开始使用libgdx,在直线上移动身体时遇到了问题,我想在

  • 以下是您将看到的一些方法的快速描述: > :返回船的边界(一个矩形) :返回表示船边界中心的Vector2d。 :一个,它表示船的速度(每帧添加到位置) :一个新的,当给定一个角度(以弧度为单位)时,将其标准化 :不是线性插值!如果你想看代码,这里是(在类中): 当玩家没有按键时,飞船应该减速。以下是我为此所做的: 然而,现在我意识到我希望它在向目标移动时漂移。我试过这个: 这当然不会真的达到零速

  • 当我触摸屏幕时,身体会逐渐移动,当触摸点靠近时,身体会变慢。我的问题是我想以恒定的速度移动身体,假设给定的速度是60 kpH,身体应该以60 kpH的速度开始移动,直到接触点。我在想解决方案是在屏幕上触摸,获得角度,然后使用该角度移动身体,然后增加速度以获得正确的速度?