【问题标题】:Moving Body using force in Libgdx based off of touch input基于触摸输入在 Libgdx 中使用力移动身体
【发布时间】:2025-11-23 21:25:01
【问题描述】:

我想要做的是接受输入的用户触地,将触地的相机坐标转换为世界坐标,然后创建一个向量以用于对我的身体施加力。 这就是我所拥有的:

    Vector3 worldPos = new Vector3(newX, newY, 0);
    GameScreen.gameCam.unproject(worldPos);

    newX = worldPos.x;
    newY = worldPos.y;

    Vector2 direction = new Vector2();

    direction.set((newX - xPos), (newY - yPos));
     if (newX <= xPos){
        direction.set((xPos - newX), (yPos - newY));
    }

    b2Body.applyForceToCenter(direction, true);

我知道,就创建矢量而言,这确实是不正确的,但坐标正在正确转换。

所以我的问题是,当我同时拥有身体的世界坐标和着陆时,我如何才能获得准确的矢量,即使是在负方向上?

我已尝试进行一些研究以更好地了解所有这些,但我遇到了一些麻烦。任何帮助将不胜感激,感谢您的宝贵时间。

【问题讨论】:

    标签: java android vector libgdx physics


    【解决方案1】:

    如果你有 newX, newY 屏幕触摸坐标,然后将其更改为世界坐标,你可以通过将 touchWorldPos 减到 currentObjectPos 来获得方向:

    Vector3 worldPos = new Vector3(newX, newY, 0);
    GameScreen.gameCam.unproject(worldPos);
    
    newX = worldPos.x;
    newY = worldPos.y;
    
    Vector2 direction = new Vector2();
    direction.set((newX - xPos), (newY - yPos));
    
    
    b2Body.applyForceToCenter(direction, true);
    

    没有这个 if 语句:

     if (newX <= xPos){
        direction.set((xPos - newX), (yPos - newY));
     }
    

    在 box2d 中,这个方向的值可能很小,你必须将这个方向乘以某个值,比如 100(可能更多)

    【讨论】: