2014-07-01 4 views
0

J'ai deux spriteNodes qui se croisent mais à des positions différentes. les deux sprites sont rectangulaires. J'obtiens un comportement étrange où il ne détecte qu'une intersection entre les nœuds s'ils se croisent sur la moitié gauche de l'un des nœuds (ce nœud est toujours le même et est toujours un nœud stationnaire). Alors, qu'est-ce qui pourrait causer un tel comportement?intersectsNode ne fonctionne pas pour la moitié droite seulement

J'ai du code que je peux montrer, mais il semble assez simple, donc si quelqu'un pense que cela pourrait aider, faites le moi savoir?

Mise à jour: il fonctionne avec un sprite différent ici est le code pour chacun d'eux:

if (!weldRUHit && [weldRU intersectsNode:[barriers objectAtIndex:i]]) { 

    SKSpriteNode *nodeA = (SKSpriteNode*)[barriers objectAtIndex:i]; 
    SKPhysicsBody *firstBody = nodeA.physicsBody; 
    SKSpriteNode *nodeB = weldRU; 
    SKPhysicsBody *secondBody = nodeB.physicsBody; 

    weldRUHit = YES; 
    [self beginIntersectionWithBodyA:firstBody bodyB:secondBody]; 
} 
    if (!weldLDHit && [weldLD intersectsNode:[barriers objectAtIndex:i]]) { 

    SKSpriteNode *nodeA = (SKSpriteNode*)[barriers objectAtIndex:i]; 
    SKPhysicsBody *firstBody = nodeA.physicsBody; 
    SKSpriteNode *nodeB = weldLD; 
    SKPhysicsBody *secondBody = nodeB.physicsBody; 

    weldLDHit = YES; 
    [self beginIntersectionWithBodyA:firstBody bodyB:secondBody]; 
} 

cela fonctionne pour weldLD mais pas pour weldRU.

+0

avez-vous changé le point d'ancrage? – LearnCocos2D

+0

@ LearnCocos2D aucun point d'ancrage n'a été modifié. voir aussi ma mise à jour. – user3794885

Répondre

0

Je rencontre le même problème avec la méthode intersectsNode: de SKNode. Je pense que cela a à voir avec une combinaison de points d'ancrage et de deux nœuds n'étant pas des enfants du même nœud parent. La propriété frame est utilisée pour détecter l'intersection des nœuds, et Apple définit la propriété frame de SKNode comme "Un rectangle dans le système de coordonnées parent ..." Ainsi, avec des parents différents, vous avez différents systèmes de coordonnées. De toute façon, ma solution est d'utiliser cette fonction à la place.

bool CGRectIntersectsRect (
    CGRect rect1, 
    CGRect rect2 
); 

Et assurez-vous simplement d'avoir le bon système de coordonnées. Astuce: utilisez la méthode convertPoint: FromNode: de SKNode.

Questions connexes