1

私は cocos2d-iphone-0.99.2 を使用し、box2d に統合しました。タグ 1 と 2 を持つ 2 種類のスプライトがあります。また、それらのボディと形状の定義を作成しました。私がやろうとしているのは、スプライト 1 の種類をソリッドとして機能させるか、スプライト 2 がそれらと衝突したときに非ソリッドとして機能させることです。私はこのコードを試しました:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) 
{    
  if (b->GetUserData() != NULL) 
    {
      CCSprite *sprite = (CCSprite *)b->GetUserData();     
        if (sprite.tag == 1) 
        {
            b2Fixture* f = b->GetFixtureList();
            f->SetSensor(solid);
        }
    }
}

solid は bool です。初めてフィクスチャをセンサーに変更したときはすべて問題ありませんが、元に戻して再度ソリッドに変更しようとすると、次のエラーでアプリがクラッシュします: アサーションに失敗しました: (manifold->pointCount > 0), function b2ContactSolver, file /Documents /myapp/libs/Box2D/Dynamics/Contacts/b2ContactSolver.cpp、58 行目。

どういうわけかフィクスチャ-> SetSensor を数回変更することは可能ですか?どんな助けでも大歓迎です。

4

1 に答える 1

1

ええと...答えは、フィクスチャが配列に保持されているため、ボディごとにフィクスチャが1つだけ変更されている場合、次のようになります。

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()){if (b->GetUserData() != NULL) 
{
  CCSprite *sprite = (CCSprite *)b->GetUserData();     
    if (sprite.tag == 1) 
    {
        b2Fixture* f = b->GetFixtureList();
        f[0]->SetSensor(solid);
    }
}

}

于 2010-10-05T08:20:31.173 に答える