Cocos2dx:一旦它们离开屏幕就会删除运动体

时间:2013-04-14 13:38:29

标签: c++ cocos2d-iphone box2d cocos2d-x

我正在尝试构建平台游戏。在我的游戏中,随机平台出现并从屏幕右侧移动到左侧部分。

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]);

    }
}       

1 个答案:

答案 0 :(得分:1)

你可以检查你的身体是否在主循环的屏幕之外,如果是这样就将它们摧毁。像.-

之类的东西
if (platformBody->GetPosition().x < SCREEN_X_LIMIT) {
    world->DestroyBody(platformBody);
    // Also, remove attached sprite if exists
}