java - Libgdx Box2d body 沿线性方向移动?

标签 java libgdx box2d

我制作了一个 body ,当单击按钮时我想要移动该 body ,我已经能够使用 body.setLinearVelocity() 移动 body ,但它不准确。假设我想以 40 的 X 线速度将 body 移动 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);
        }

我可以只使用body.setTransform(),但我需要 body 实际移动而不是传送。预先感谢您

最佳答案

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

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

除此之外,您的方法在移动距离上有轻微的模糊性,因为您的检查 timer < 0.1f 取决于您的帧速率。不太准确:

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

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

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

关于java - Libgdx Box2d body 沿线性方向移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48733343/

相关文章:

java - 我的项目中的插页式广告

java - 将 Spark Streaming 中的新值与之前的平均值进行比较

java - 如何使用 Spring Boot 在不同端口启动 Web 容器和 Netty 服务器?

java - JFrame 调整大小并且 ScrollBars 不可见

java - 将文本按钮居中到屏幕 libgdx

libgdx - GameStateManager LibGDX

java - 如何在 libgdx/box2d 中获取对象的向上 vector ?

iphone - Box2d Loop Shape/在 Cocos2D 中创建静态地面形状

box2d - 使用 box2d 时速度有上限吗?

java - java中的运行时类