因为我在我的帖子中得到了答案,并且没有人解决这个问题,我再次问这个问题。对此没有一个解释。
我需要检测一个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。
请问任何方向? 非常感谢。
答案 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);
}
}
}
如果您触摸右侧精灵(已标记),则会被破坏。