2010-11-23 2 views
0

게임을 쓰려고하는데이 애니메이션이 조금 붙어 있습니다. 내 화면에서 수평으로 움직이는 공이 있습니다. 다음은 코드입니다.CABasicAnimation으로 공을 수평으로 이동하고 정확한 위치에서 볼을 멈추는 방법

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

먼저 horizontalBallAnimation의 "ToValue"에 애니메이션을 적용합니다. 그런 다음 gameObject에 설정된 올바른 값으로 이동합니다. 누군가 이걸로 나를 도울 수 있니?

+0

cocos2d를 사용 하시겠습니까? CA보다 톤이 더 쉽습니다. –

+0

나는 cocos2D를 좋아하지만 좋은 방법으로 CALayers로 그것을 개발할 수 있다고 생각한다. 정말 빨라요. 그 뒤에는 OpenGL 드로잉이 있습니다. – beit

답변

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