2010-11-23 4 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よりも簡単だと思う。 –

+0

私はcocos2Dが好きですが、私はCALayersでうまく開発できると思います。それは本当に速く、その背後には、OpenGLESの描画があります。 – 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]; 
}