Box2D - 物理控制运动

Box2D - Controlled Movement with Physics

我正在使用 LibGDX 创建 Java 桌面 2D 游戏。

我需要能够移动物体(由 W/A/S/D 的玩家控制)。
移动速度始终相同(从移动物体的一个字段中读出)。

虽然它们在移动,但它们应该仍会受到物理影响。
这意味着当远离磁铁时会让你移动得更慢,靠近它会让你更快,而越过它会让你移动曲线。 (见图片蓝色部分)

移动时的单一冲动也会将您击倒,但您会继续移动(参见图像的红色部分)

你也应该能够改变方向或停止,只是停止你自己的运动,所以你仍然会受到物理的影响。


所以我需要施加在下一步之后仍然可以访问(和移动)的恒定力。
我可以用 Box2D 做这个吗?
-如果是,如何?
-如果没有,还有其他图书馆可以做到这一点吗?我真的不需要密度之类的东西,图像中的用例几乎就是我所需要的(+ 碰撞检测)。

*磁铁就是一个物体不断地把一定范围内的其他物体拉向自己
*Kockback 只是一个简单的冲动或弹丸与物体的碰撞。



编辑: 如果你知道以撒的结合,那就是我的目标物理。

设置磁铁影响的距离:

float magnetRadius = 30;

设置磁铁的吸引力:

float magnetForce = 400;

获取玩家和磁铁的位置:

Vector2 magnetPos = magnet.getWorldCenter();
Vector2 playerPos = player.getWorldCenter();

现在计算玩家和磁铁之间的距离:

Vector2 magnetDist = new Vector2((playerPos.x - magnetPos.x), (playerPos.y - magnetPos.y));
float distance = (float) Math.sqrt((magnetPos.x) * (magnetPos.x) + (magnetPos.y) * (magnetPos.y));

然后,如果玩家在磁铁的半径内,您必须根据玩家与磁铁的距离向他施加力:

if (distance <= magnetRadius) {
   float vecSum = Math.abs(magnetDist.x)+Math.abs(magnetDist.y);
   Vector2 force = new Vector2((magnetForce*magnetDist.x * ((1/vecSum)*magnetRadius/distance)), (magnetForce*magnetDist.y * ((1/vecSum)*planetRadius/distance)));
   player.applyForceToCenter(force, true);
}