目前我在我的一个游戏中使用 Box2D 物理引擎——我想知道我是否可以创建一个重力井,其中所有物体都被吸引到一个任意点。有什么方法可以做到这一点,还是我必须对每个身体施加某种自定义力量?(我尝试制作一个静态的超致密物体,但 Box2D 并没有在身体对身体的基础上应用牛顿万有引力定律)
另外,有没有办法制作反重力井?我可以制作一个以任意点为中心的更密集的球体并使用浮力来实现这一点吗?
目前我在我的一个游戏中使用 Box2D 物理引擎——我想知道我是否可以创建一个重力井,其中所有物体都被吸引到一个任意点。有什么方法可以做到这一点,还是我必须对每个身体施加某种自定义力量?(我尝试制作一个静态的超致密物体,但 Box2D 并没有在身体对身体的基础上应用牛顿万有引力定律)
另外,有没有办法制作反重力井?我可以制作一个以任意点为中心的更密集的球体并使用浮力来实现这一点吗?
不幸的是,这个功能没有内置到 Box2D 中。最简单的方法是获取重力井和刚体之间的角度和距离,并相应地设置物体速度。
获取角度:
double dx = rigidBodyX - gravityWellX;
double dy = rigidBodyY - gravityWellY;
double angle = atan2(dy, dx);
// angle is in radians, use atan2(dy, dx) / PI * 180 if
// you need degrees
要获得距离:
double dx = rigidBodyX - gravityWellX;
double dy = rigidBodyY - gravityWellY;
double dist = sqrt(dx * dx + dy * dy);
我使用 flash 和我编写的名为 QuickBox2D 的库创建了一个快速示例。由于语法与 C++ Box2D 库非常不同,因此它可能没有那么有用,但基本原理是相同的。这也不是一个完美的例子,但它可能会让你开始。