我正在使用LibGDX创建一个Java桌面2D游戏。
我需要能够移动物体(由玩家用W / A / S / D控制)。
移动速度始终相同(从移动物体的场中读出)。
当他们移动时,他们仍应受物理影响。
这意味着当远离磁铁时会让你移动得更慢,朝着它移动会让你更快并且越过它将导致你移动一条曲线。 (见图像的蓝色部分)
同时移动中的一个冲动会让你离开,但你继续前进(见图像的红色部分)
你也应该能够改变方向或停止,只停止自己的运动,所以你仍然会受到物理的影响。
所以我需要在下一步之后应用仍然可以访问(和可移动)的恒定力。
我可以用Box2D做到这一点吗?
- 如果是,怎么样?
- 如果没有,任何其他图书馆都能做到这一点?我并不真的需要密度和类似的东西,图像中的用例几乎是我所需要的(+碰撞检测)。
*磁铁会不断地将其他物体拉到一定范围内
* Kockback只是一个简单的冲动或射弹与物体的碰撞。
编辑:如果你知道艾萨克的束缚,那就是我瞄准的那种物理。
答案 0 :(得分:2)
设置磁铁影响的距离:
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);
}