Objective c CGRectContainsPoint使用与框架相反的形状

Objective c CGRectContainsPoint使用与框架相反的形状,objective-c,frame,uibezierpath,cgrect,skshapenode,Objective C,Frame,Uibezierpath,Cgrect,Skshapenode,我们在这里找到了我们的探测器 -(void)checkInFOVWithPlayer:(Player *)player andEnemy:(Player *)enemy { SKNode *fovNode = [player childNodeWithName:player.playersFOVName]; SKNode *node = [self childNodeWithName:@"enemy"]; CGPoint newPosition = [self con

我们在这里找到了我们的探测器

-(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];
    }
}
以及我们对视野的实施

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];
现在,这是可行的。然而,“视野”的检测范围实际上不是BezierPath的边界,而是创建图像的CGRect

因此,检测将运行,即使它在视野之外


我很好奇是否有一个简单的解决方法,因为如果我不需要的话,我真的不想走物理身体的道路。

最后我找到了需要的东西

之后,我必须重新绘制路径,并针对每一帧对其进行优化

if (CGPathContainsPoint(fovPath.CGPath, nil, newPosition, NO)) {}
结束了我的问题