/ / cocos2D e Box2D: como obter sprites com toque exato? - iphone, cocos2d-iphone, box2d

cocos2D e Box2D: Como obter o sprite exato tocado? - iphone, cocos2d-iphone, box2d

Estou tentando mover sprite no toque movido. mas quando dois sprites estão lá, estou recebendo o toque de dois sprites. é por isso que os sprites não estão se movendo corretamente.

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{

if (_mouseJoint != NULL) return;

UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:[myTouch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

for(int i=0;i<[mutArrFixtures count];i++)
{
b2Fixture *fixture;
[[mutArrFixtures objectAtIndex:i] getValue:&fixture];

if (fixture->TestPoint(locationWorld)){

for(int j=0; j<[mutArrPaddleBody count]; j++)
{
b2Body *body;
[[mutArrPaddleBody objectAtIndex:j] getValue:&body];
b2MouseJointDef md;
if(body == fixture->GetBody())
{
md.bodyA = _groundBody;
md.bodyB = body;
md.target = locationWorld;
md.collideConnected = true;
md.maxForce = 1000.0f * body->GetMass();

_mouseJoint = (b2MouseJoint *)_world->CreateJoint(&md);
body->SetAwake(true);
}
}
}
}
}

Eu tenho uma matriz de b2Fixture mutArrFixtures e também uma matriz mutArrPaddleBody de b2body. mas neste, se eu tocar no segundo sprite, eu toco no primeiro sprite e no segundo sprite .. duas posições de sprites são iguais ...

Respostas:

1 para resposta № 1

Na função de toque, verifique a etiqueta do sprite. Se esse é o seu sprite certo, mova-se. Mostre-me algum código que você usou para o movimento do toque.

.......

Substitua esse código pelo próximo

            b2Body *body;
[[mutArrPaddleBody objectAtIndex:j] getValue:&body];
b2MouseJointDef md;
if(body == fixture->GetBody())

com

b2Body* body = fixture->GetBody();

CCSprite *sprite = (CCSprite*)body->GetUserData();

if( sprite && sprite.tag == kTagHero)
{

}

Certifique-se de ter adicionado a tag kTagHero para o seu sprite em movimento.

....

enum gameTag {
kTagHero = 1001
};

e atribua sprite.tag = kTagHero ......