Как уничтожить b2Body в Box2D (cocos2d)?После проверки пройденного расстояния - PullRequest
0 голосов
/ 09 июля 2011

У меня есть пули в box2d / cocos2d-для-iphone.Они хорошо летают ... но я хочу уничтожить эти пули после того, как они прошли определенное расстояние.например, после того, как пуля «вылетела» 480px, она должна быть удалена.

Как этого достичь?

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Чтобы подсчитать расстояние, при создании магазина пули его положение где-нибудь. Тогда каждый шаг проверяйте:

b2Vec2 diff = bullet->GetPosition() - startPosition;
if (diff.Length() > MaxLen)
{
    world->DestroyBody(bullet);
}

EDIT:

если вы хотите вычислить длину пути, то сохраните где-нибудь предыдущую позицию и длину пути, то есть изначально 0:

b2Vec2 diff = bullet->GetPosition() - prevPosition;
pathLength += diff.Length();
if (pathLength > MaxLen())
{
    //destroy bullet//world->DestroyBody(bullet);
}
1 голос
/ 09 июля 2011

Все довольно просто: world->DestroyBody(body). И маленький совет. Для хорошей практики и производительности вы не должны создавать пули снова и снова. Повторно используйте это! Просто сделайте их невидимыми и разместите их в позиции источника.

...