0

私はゲームを書こうとしていますが、このアニメーションに少し行き詰まっています。画面内で水平方向に動くボールがあります。コードは次のとおりです。

CABasicAnimation *horizontalBallAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[horizontalBallAnimation setFromValue:[NSValue valueWithCGPoint:CGPointMake(50.0, 300.0 )]];
[horizontalBallAnimation setToValue:[NSValue valueWithCGPoint:CGPointMake(220.0, 300.0 )]];

horizontalBallAnimation.delegate = self;
horizontalBallAnimation.repeatCount = 1e100f;
//horizontalBallAnimation.autoreverses = YES;
horizontalBallAnimation.duration = 2.0;

[gameBallLayer addAnimation:horizontalBallAnimation forKey:@"horizontalBallAnimation"];

これは素晴らしい作品です。ただし、私の問題は、アニメーションを停止すると、画面をタップするだけで、正しい位置に移動する前にボールが移動することです。

[gameLogic ballGameObject].x = [[[gameBallLayer presentationLayer] valueForKeyPath:@"position.x"] doubleValue];
    [gameLogic ballGameObject].y = [[[gameBallLayer presentationLayer] valueForKeyPath:@"position.y"] doubleValue];

最初に、Horizo​​ntalBallAnimation の「ToValue」にアニメーション化します。次に、gameObject によって設定された正しい値に移動します。誰かがこれで私を助けてくれますか?

4

1 に答える 1

0

あなたがする必要があるのは、CATransactionアクションを無効にするターゲット位置を 内に設定することです。例えば:

//--------------------------------------------------------------------------------------------------

#pragma mark - CAAnimation Delegate Methods 

//--------------------------------------------------------------------------------------------------

- (void)animationDidStart:(CAAnimation *)theAnimation
{
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];

    // Set the layer's target position here.        

    [CATransaction commit];
}
于 2011-11-09T18:03:34.843 に答える