Box2D(C ++)Gravity Wells

时间:2010-12-06 04:40:47

标签: c++ physics box2d game-physics gravity

目前我在我的游戏中使用Box2D物理引擎 - 我想知道我是否可以创建各种重力井,其中所有物体都被吸引到一个任意点。有没有某种方法可以做到这一点,还是我必须对每个身体施加各种习惯力? (我尝试制作一个静态超密体,但是Box2D并没有在身体到身体的基础上应用牛顿万有引力定律)

另外,有没有办法让反重力好?我可以制作一个以任意点为中心的更密集的球体并使用浮力来实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

遗憾的是,此功能未内置于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库非常不同,但基本原理是相同的。它也不是一个完美的例子,但它可能会让你开始。

See The Flash Example