Как переместить шар горизонтально с помощью CABasicAnimation и остановить шар в нужном месте - PullRequest
0 голосов
/ 23 ноября 2010

Я пытаюсь написать игру, и я немного застрял в этой анимации. У меня есть шар, который анимируется горизонтально на моем экране. Вот код:

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

сначала анимирует "ToValue" горизонтальной анимации. Затем он возвращается к правильному значению, установленному gameObject. Кто-нибудь может помочь мне с этим?

1 Ответ

0 голосов
/ 09 ноября 2011

Что вам нужно сделать, это установить целевую позицию в пределах 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];
}
...