Box2D (C ++) гравитационные скважины - PullRequest
2 голосов
/ 06 декабря 2010

В настоящее время я использую физический движок Box2D в моей игре - и мне было интересно, смогу ли я создать своего рода гравитационный колодец, в котором все тела притягиваются к одной произвольной точке. Есть ли определенный способ сделать это, или я должен буду применить своеобразную силу сортов к каждому телу? (Я пытался создать статическое сверхплотное тело, но Box2D не применяет закон всемирного тяготения Ньютона на основе тела к телу)

Кроме того, есть ли способ сделать антигравитацию хорошо? Могу ли я сделать более плотную сферу вокруг произвольной точки и использовать плавучесть для достижения этой цели?

1 Ответ

4 голосов
/ 06 декабря 2010

Эта функция, к сожалению, не встроена в 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, но основной принцип такой же. Это также не идеальный пример, но он может помочь вам начать.

См. Пример Flash

...