2015-09-12 2 views
0

Questionintersection CGRect de l'enfant à l'auto

Comment parvenir à une intersection de deux sprites, quand on est un enfant de self et l'autre est un enfant d'un sprite? Comme leurs positions sont complètement différentes pertinentes pour les comparaisons entre les uns et les autres?

Exemple; ceci est couru avant chaque image pour déterminer si elles se croisent

-(void)checkInFOVWithPlayer:(Player *)player andEnemy:(Player *)enemy { 
    SKNode *node = [player childNodeWithName:player.playersFOVName]; 

    if (CGRectIntersectsRect(node.frame, enemy.frame)) { 
//  [self playerAimAtEnemy:enemy withPlayer:player]; 

     NSLog(@"inframe"); 
    } else { 
     NSLog(@" "); 
    } 
} 

Cependant, node est un enfant de player et enemy est un enfant de self. Alors, comment pouvez-vous vérifier si elles se croisent?

est ici où ils sont initialisés

float radianAngle = ((fovAngle)/180.0 * M_PI); 

float fovOpposite = atanf(radianAngle) * fovDistance; 

SKShapeNode *fov = [SKShapeNode node]; 
UIBezierPath *fovPath = [[UIBezierPath alloc] init]; 
[fovPath moveToPoint:CGPointMake(0, 0)]; 
[fovPath addLineToPoint:CGPointMake(fovOpposite *-1, fovDistance)]; 
[fovPath addLineToPoint:CGPointMake(fovOpposite, fovDistance)]; 
[fovPath addLineToPoint:CGPointMake(0, 0)]; 
fov.path = fovPath.CGPath; 
fov.lineWidth = 1.0; 
fov.strokeColor = [UIColor clearColor]; 
fov.antialiased = NO; 
fov.fillColor = [UIColor greenColor]; 
fov.alpha = 0.2; 
fov.name = @"playerFOV"; 
[_playerImage addChild:fov]; 

and enemy 

NSString *bundle = [[NSBundle mainBundle] pathForResource:@"enemyImage" ofType:@"png"]; 
UIImage *image = [[UIImage alloc] initWithContentsOfFile:bundle]; 
SKTexture *texture = [SKTexture textureWithImage:image]; 
_enemy = [Player spriteNodeWithTexture:texture]; 
_enemy.position = CGPointMake(100, 100); 
_enemy.size = CGSizeMake(20, 20); 
_enemy.playerAimAngle = [self returnRandomNumberBetween:0 to:360]; 
_enemy.anchorPoint = CGPointMake(0.5, 0.5); 
_enemy.playerHealth = 100; 
_enemy.playerIsDead = false; 
[self addChild:_enemy]; 
+2

Convertissez les deux images en un système de coordonnées commun tel que l'écran. – rmaddy

+0

@rmaddy Comment est-ce que j'aborderais cela? – Daniel

+0

@rmaddy 'CGPoint positionInScene = [node.scene convertPoint: ennemi.position enNode: node.parent];' Essayer de jouer avec, ne peut toujours pas obtenir de résultats. – Daniel

Répondre

0
-(void)checkInFOVWithPlayer:(Player *)player andEnemy:(Player *)enemy { 
    SKNode *fovNode = [player childNodeWithName:player.playersFOVName]; 

    SKNode *node = [self childNodeWithName:@"enemy"]; 

    CGPoint newPosition = [self convertPoint:node.position toNode:fovNode.parent]; 

    if (CGRectContainsPoint(fovNode.frame, newPosition)) { 
     [self playerAimAtEnemy:enemy withPlayer:player]; 
    } 
} 

Cela a fini par être ma solution au problème, maintenant cependant, je dois trouver un moyen de changer le cadre du nœud afin qu'il soit pas rectangulaire.