0

SKAction を使用して Circle CGPathRef を時計回りにたどる方法について、 この回答を見ました。

長方形のパスはどうですか?デフォルトは反時計回りです。

CGPathRef square =     CGPathCreateWithRect(CGRectMake(pathOriginX,pathOriginY,pathWidthX,pathHeightY), NULL);
SKAction *followTrack = [SKAction followPath:square asOffset:NO orientToPath:YES duration:completeOnePathDuration];

エンドポイントを変更しようとしましたが、結果は同じです。

4

1 に答える 1

1

簡単な答え:アクションを逆方向に実行して、パスを反対方向にたどります。

    [sprite runAction:[followTrack reversedAction]];

長い答え: followPath SKAction は、パスが構築された方向に従います。スプライトを長方形のパスに沿って時計回りまたは反時計回りに移動させたい場合は、それに応じてパスを作成します。または、reverseAction メソッドを使用して、作成された方向とは逆の方向にパスをたどることができます。両方の方法の例を次に示します。

    BOOL clockwise = YES;
    BOOL reversedActionMethod = NO;

    CGRect rect = CGRectMake(CGRectGetWidth(self.frame)/2-50,CGRectGetHeight(self.frame)/2-50, 100, 100);
    SKAction *followTrackCW = [SKAction followPath:[self clockwiseRectanglePathWithRect:rect] asOffset:NO orientToPath:YES duration:5];
    SKAction *followTrackCCW = [SKAction followPath:[self counterClockwiseRectanglePathWithRect:rect] asOffset:NO orientToPath:YES duration:5];

    if (!reversedActionMethod) {
        if (clockwise) {
            [sprite runAction:followTrackCW];
        }
        else {
            [sprite runAction:followTrackCCW];
        }
    }
    else {
        if (clockwise) {
            [sprite runAction:[followTrackCCW reversedAction]];
        }
        else {
            [sprite runAction: followTrackCCW];
        }
    }

シーン座標 (ビュー座標では反時計回り) で時計回りに長方形のパスを作成します。

- (CGPathRef) clockwiseRectanglePathWithRect:(CGRect)rect
{
    CGFloat x = rect.origin.x;
    CGFloat y = rect.origin.y;
    CGFloat width = rect.size.width;
    CGFloat height = rect.size.width;

    UIBezierPath* bezierPath = UIBezierPath.bezierPath;
    [bezierPath moveToPoint: CGPointMake(x, y)];
    [bezierPath addLineToPoint: CGPointMake(x, y+height)];
    [bezierPath addLineToPoint: CGPointMake(x+width, y+height)];
    [bezierPath addLineToPoint: CGPointMake(x+width, y)];
    [bezierPath closePath];
    return bezierPath.CGPath;
}

ビルトイン メソッドを使用して、シーン座標 (およびビュー座標で CW) で反時計回りの順序で長方形のパスを作成します。

- (CGPathRef) counterClockwiseRectanglePathWithRect:(CGRect)rect
{
    UIBezierPath* bezierPath = [UIBezierPath bezierPathWithRect:rect];
    return bezierPath.CGPath;
}
于 2014-08-24T17:34:38.090 に答える