java - 在 Libgdx 中基于触摸输入使用力移动主体

标签 java android vector libgdx physics

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

    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);

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

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

我尝试做一些研究来更好地理解这一切,但我遇到了一些麻烦。任何帮助将不胜感激,感谢您的宝贵时间。

最佳答案

如果您有 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(可能更多)

关于java - 在 Libgdx 中基于触摸输入使用力移动主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114747/

相关文章:

Java创建时间类

java - 如何修复java.lang.NoClassDefFoundError : net/sf/ehcache/CacheException when configuring EhCache for Hibernate 5. 2.5

java - 如何模拟数据库故障以测试 Java 中的两阶段提交

android: 像 gmail 一样的 MultiAutoCompleteTextView 风格

java - 使用@OneToMany 和@ManyToMany 的区别

android - Admob 插页式广告显示错误构建请求 URL

Android BootReceiver 不工作

c++ - 硬币找零 DP 算法打印所有组合

arrays - Matlab 重采样向量

c++ - 在 C++ 中,调试断言失败窗口弹出 & 我得到 vector 迭代器不兼容的错误运行时