0

質問

self一方が の子で、もう一方が の子である場合、2 つのスプライトの交差を実現するにはどうすればよい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];
4

1 に答える 1

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

これが問題の解決策になりましたが、ノードのフレームを長方形にならないように変更する方法を見つける必要があります。

于 2015-09-14T22:12:59.333 に答える