2010-11-23 51 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]; 

首先動畫到horizo​​ntalBallAnimation的「ToValue」。然後,它轉到由gameObject設置的正確值。有人可以幫我這個嗎?

+0

使用cocos2d?我發現它比CA容易得多。 – 2010-11-23 17:18:29

回答

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