Я пытаюсь построить платформенную игру. В моей игре случайные платформы появляются и перемещаются из правой части экрана в левую часть.
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]); } }
Вы можете проверить, находятся ли ваши тела вне основного цикла, и уничтожить их, если это так. Что-то вроде.-
if (platformBody->GetPosition().x < SCREEN_X_LIMIT) {
world->DestroyBody(platformBody);
// Also, remove attached sprite if exists
}
Других решений пока нет …