我正在尝试构建平台游戏。在我的游戏中,随机平台出现并从屏幕右侧移动到左侧部分。
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 :(得分:1)
你可以检查你的身体是否在主循环的屏幕之外,如果是这样就将它们摧毁。像.-
之类的东西if (platformBody->GetPosition().x < SCREEN_X_LIMIT) {
world->DestroyBody(platformBody);
// Also, remove attached sprite if exists
}