0

Je suis en train de créer un point et cliquez sur l'application pour l'iphone en utilisant cocos2d. Cependant, avec ma mise en œuvre actuelle, la condition de détection de collision n'est vraie que si je clique sur le coin supérieur gauche et pas n'importe où dans l'image-objet. Si je mets la position de l'ancre à 0 cela rend les choses meilleures mais cela provoque la rupture de ma fonction de sprite.cocos2d détection de collision de sprite

Voici mon code, quelqu'un peut-il trouver quelque chose de mal ici? dans mon code init

if((self=[super init])) 
{  

     cocosGuy = [TouchableSprites spriteWithFile: @"Icon.png"]; 
     //[cocosGuy setAnchorPoint:CGPointMake(0, 0)]; 
     cocosGuy.position = ccp(200, 300); 
    //[cocosGuy setPosition: ccp(100,100)]; 
     [self addChild:cocosGuy]; 
    self.isTouchEnabled = YES; 
} 

dans touchBegan i déterminer si oui ou non une image a été touché

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

CGSize size = [cocosGuy contentSize]; 
CGPoint point = [cocosGuy position]; 
CGRect rect = CGRectMake(point.x, point.y, size.width, size.height); 

if (CGRectContainsPoint(rect, ptConv)) 
{ 
    retValue = YES; 
} 

Toute aide serait grandement appréciée

Répondre

0

Le rect que vous générez prend la touche pointez, puis faites le rectangle à partir de ce point comme le coin. Les points CCSprites ont leur point d'origine au milieu de l'image

Vous devez donc expliquer que lors de votre rect

CGRect rect = CGRectMake(point.x - (size.width/2), point.y - (size.height/2), size.width, size.height);

0

Pour faire face à la rotation de la meilleure approche serait de convertir point de contact dans sprite espace local (ce qui assurera également mise à l'échelle correctement et de la hiérarchie des sprites)

CGPoint ptConv = [cocosGuy convertTouchToNodeSpace: touch]; 
if (CGRectContainsPoint ([cocosGuy boundingBox], ptConv) 
{ 
    retValue = YES; 
} 
+0

Merci les gars i ont réglé avec votre aide, aussi cette ligne n'a pas aidé à la rotation, se débarrasser de celui-ci a résolu une partie du problème – godzilla

+0

[selSprite runAction: [CCRotateTo actionWithDuration: 0,1 angle: 0]]; – godzilla

Questions connexes