一个SPECIFIC精灵触摸检测

时间:2011-11-17 09:58:08

标签: cocos2d-iphone

因为我在我的帖子中得到了答案,并且没有人解决这个问题,我再次问这个问题。对此没有一个解释。

我需要检测一个sprite touch,一个SPECIFIC。在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 :(得分:0)

好的,我知道了:

这就是我所做的,摧毁特定的身体,与此处所说的不同:

将下一个代码放入触摸方法中:

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

            }
        }
    }

如果您触摸右侧精灵(已标记),则会被破坏。