Cocos2dx: удаление кинематических тел, когда они находятся за пределами экрана

Я пытаюсь построить платформенную игру. В моей игре случайные платформы появляются и перемещаются из правой части экрана в левую часть.

Using :
b2Vec2 impulse = b2Vec2(-5, 0);
platformBody->SetLinearVelocity(impulse);

Но когда я вижу свою статистику, число call / countRef (первая строка статистики) всегда увеличивается по мере того, как новые платформы перемещаются справа налево. Я хочу знать, как я могу удалить существующие платформы после того, как они переместились через левый экран (за пределы экрана). Все мои платформы — это b2_kinematic тела (Box2D).

РЕДАКТИРОВАТЬ ОТВЕТ:

Мне удалось решить это через следующее:

for (std :: vector :: size_type i = 0; i! = m_platforms.size (); i ++)

{

  if (m_platforms[i]->GetPosition().x < 0.0f && m_platforms[i]->GetType() == b2_kinematicBody)

{

CCSprite *sprite = (CCSprite *) m_platforms[i]->GetUserData();

sprite->removeFromParentAndCleanup(true);

world->DestroyBody(m_platforms[i]);

}
}

0

Решение

Вы можете проверить, находятся ли ваши тела вне основного цикла, и уничтожить их, если это так. Что-то вроде.-

if (platformBody->GetPosition().x < SCREEN_X_LIMIT) {
world->DestroyBody(platformBody);
// Also, remove attached sprite if exists
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector