СПЕЦИАЛЬНОЕ обнаружение спрайтов - PullRequest
0 голосов
/ 17 ноября 2011

, так как я не получил ответ в своем предыдущем посте, и никто не решил эту проблему, я спрашиваю об этом снова.1 объяснения этому нет.

Мне нужно обнаружить спрайт, ОСОБЕННЫЙ.в cocos2d + box2d.

допустим, у меня есть спрайт CCSprite *ran, у которого есть тело, НО, у меня есть много его.

, если я обнаруживаю прикосновение кccTouchesBegan, и используйте if(CGRectContainsPoint(particularSpriteRect, currentPosition))

, я обнаружу касание в ran, но я не знаю, кто управлял этим от всех, и мне нужно уничтожить, чем конкретный ran, который яне могу знать, кто это был.

я нахожу лучший способ сделать это, как я делаю с контактным слушателем, который дает мне определенные пользовательские данные спрайта:

CCSprite *actora = (CCSprite*)bodyA->GetUserData();   
CCSprite *actorb = (CCSprite*)bodyB->GetUserData();

и затем я знаю, чтоActora - это то, что нужно уничтожить, потому что у меня есть его пользовательские данные.

[self removeChild:actora cleanup:YES]; 

, поэтому, опять же, мне нужно обнаружить прикосновение спрайта и ЗНАТЬ, кто это был, потому что у меня много ran's.я думаю, что-то должно включать userData.

в любом направлении, пожалуйста?Большое спасибо.

1 Ответ

0 голосов
/ 17 ноября 2011

хорошо, я понял:

это то, что я делаю, чтобы уничтожить конкретное тело, отличное от того, что было сказано здесь:

поместите следующий код в метод касания:

CGPoint currentPosition = [touch locationInView: [touch view]]; 
 currentPosition = [[CCDirector sharedDirector] convertToGL: currentPosition];

    b2Vec2 locationWorld = b2Vec2(currentPosition.x/PTM_RATIO, currentPosition.y/PTM_RATIO);

    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
    {
        b2Fixture *bf1 = b->GetFixtureList();
        if (bf1->TestPoint(locationWorld))
        {
            CCSprite *tempSprite = (CCSprite *) b->GetUserData();
            if (tempSprite .tag==2 || tempSprite .tag==3) 
            {
                [self removeChild:tempSprite cleanup:YES];
                world->DestroyBody(b);

            }
        }
    }

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

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