c++ - Box2D (C++) 重力井

标签 c++ physics box2d game-physics gravity

目前,我在我的一个游戏中使用 Box2D 物理引擎 - 我想知道是否可以创建一个重力井,其中所有物体都被吸引到一个任意点。有没有某种方法可以做到这一点,或者我必须对每个 body 施加某种自定义的力量? (我尝试制作静态超密体,但 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 库非常不同,但基本原理是相同的。这也不是一个完美的示例,但它可能会帮助您入门。

See The Flash Example

关于c++ - Box2D (C++) 重力井,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363282/

相关文章:

c++ - 无论如何有一个多维 map ?

c++ - 考虑 。 (点)当应用于应该是运行时多态的东西时

java - 如何检查Java中变量的增长率?

android - 发生碰撞时移除物体

c++ - 在 C++ 标准中,当我同时使用 list.begin() 作为 list.splice() 的第一个和第三个参数时,为什么会出现无限循环

c++ - 在 c++ 中将 gtk_signal_connect 与成员函数一起使用

c++ - 使用平面法线旋转

java - Vector3f 还是 Vector3d?

javascript - box2d world.ClearForces() 有什么意义?

ios - 创建游戏重播时的计时问题(赛车幽灵)