0
私はcocos2dを使用していて、スプライトとボディを多数持っています。各スプライトには本体があり、各種類のスプライトにはタグがあります。 (次を参照)。画面から特定のスプライトを消去する
2つのスプライトが互いに接触しているとき、私はそれを発見することができ、それらを消滅させたい。
問題は同じ種類(同じタグを持つ)のスプライトが多いため、スプライトをクリーンにすると、作成された最後のスプライトがきれいになります。
同じ種類のスプライトを作成私の機能は次のとおりです。
//cotact listener
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos)
{
MyContact contact = *pos;
b2Body *bodyA=contact.fixtureA->GetBody();
b2Body *bodyB=contact.fixtureB->GetBody();
//check if collision between to bodies
if(bodyA->GetUserData() !=NULL && bodyB->GetUserData() !=NULL) //if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture))
{
CCSprite *actor = (CCSprite*)bodyA->GetUserData();
CCSprite *actorb = (CCSprite*)bodyB->GetUserData();
//touch
if ([actorb tag] == 2 && [actor tag]== 1)
{
[fruit1.parent removeChild:fruit1 cleanup:YES];
NSLog(@"touch1");
}
今消えスプライト:私はこれとの接触を見たとき 2としてタグ付けされ
-(void)fruit1:(int) randomForCoordinates
{
//define sprite
fruit1=[CCSprite spriteWithFile:@"fruit1.png"];
fruit1.tag=2;
fruit1.position=ccp(randomForCoordinates,500);
//add fruit
b2BodyDef spriteBodyDef;
spriteBodyDef.type =b2_dynamicBody;
spriteBodyDef.position.Set(fruit1.position.x/PTM_RATIO,fruit1.position.y/PTM_RATIO);
spriteBodyDef.userData = fruit1;
fruit1body = world->CreateBody(&spriteBodyDef);
b2PolygonShape spriteShape; //b2polygon-for box shape
spriteShape.SetAsBox(fruit1.contentSize.width/PTM_RATIO/2,fruit1.contentSize.height/PTM_RATIO/2); //for b2polygon
b2FixtureDef spriteShapeDef;
spriteShapeDef.shape = &spriteShape;
spriteShapeDef.density = 10.0;
spriteShapeDef.isSensor = false;
fruit1body->CreateFixture(&spriteShapeDef);
[self addChild:fruit1];
}
ここに触れたものではなく、彼の後に作成されたものです。
どうすれば別のスプライトに触れたのでしょうか? 最後に作成されたものではありませんか?
おかげでたくさん
おかげで、私はこの警告を得る:インスタンスメソッドのremoveChild:withCleanup見つかりません(IDへの戻り値の型のデフォルト) ..それをどうやって修正するのですか? – Curnelious
私は[self removeChild:actorb cleanup:YES]を実行してもOKです。連絡先リスナーをダニ法の外に置いても、私のシミュレーションはクラッシュします。私は間違って何をしていますか? – Curnelious
クラッシュこれは.thisされていないしようとした場合([actorbタグ] == 10 && [アクタータグ] == 11){ \t \t \t \t世界的> DestroyBody(bodyB)。 \t \t \t \t \t \t \t \t [自己のremoveChild:actorbクリーンアップ:YES]。 \t \t \t \t NSLog(@ "touch1"); \t \t \t \t return; \t \t \t \t } – banu