Уберите определенный спрайт с экрана - PullRequest
0 голосов
/ 08 ноября 2011

Я использую cocos2d и имею много спрайтов и тел. каждый спрайт имеет свое тело, а каждый вид спрайта имеет тег. (см. далее).

когда 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];

}

который помечен как 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");

            }

Теперь исчезающий спрайт - это не тот, который здесь коснулся, а тот, который был создан после него ..

КАК я могу стереть СПЕЦИАЛЬНЫЙ спрайт - тот, который только что коснулся другого ?? не последний создан?

большое спасибо

1 Ответ

1 голос
/ 08 ноября 2011

Если два спрайта являются Collide, вы удалите любой из них, как показано ниже:

 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)
        {

            [self removeChild:actor cleanup:YES];
            //(or)
            [self removeChild:actorb cleanup:YES];


        NSLog(@"touch1");

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...