2015-09-12 5 views
0

ВопросCGRect пересечение от ребенка к себе

Как достичь пересечения двух спрайтов, когда один ребенок из self, а другой ребенок из sprite?

Как их позиции совершенно разные, связанные с сравнениями между собой?

Пример; это побежал перед каждым кадром, чтобы определить, пересекаются ли они

-(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(@" "); 
    } 
} 

Однако node является потомком player и enemy является потомком self. Итак, как вы можете проверить, пересекаются ли они?

Вот где они инициализируются

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

Преобразование обоих кадров в общую систему координат, такую ​​как экран. – rmaddy

+0

@rmaddy Как бы я подходил к этому? – Daniel

+0

@rmaddy 'CGPoint positionInScene = [node.scene convertPoint: enemy.position toNode: node.parent];' Попытка играть с этим, все равно не может получить никаких результатов. – Daniel

ответ

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]; 
    } 
} 

Это закончилось тем, что мое решение проблемы, сейчас же я должен найти способ изменить кадр узла так, чтобы он не прямоугольной.

Смежные вопросы