2009-03-31 12 views
1

ゲームのために複数の部分をアニメーション化したいと思います。これらの部分を別々の方向に移動したいので、現在のビュー全体をアニメーション化する方法が機能しなくなりました。iPhoneで複数のアニメーションを行うにはどうすればよいですか?

複数の項目を一度にアニメーション化するためのベストプラクティスは何ですか? (私は2Dでレンダリングしていますので、現在3Dソルトには興味がありません)

ありがとう!

+0

あなたは現在どのテクニックを使用しており、Core Animationを試しましたか? –

+0

私は、イメージを中央に置く単一のUIビューでコアアニメーション変換を使用しています。 – Skyler

答えて

8

複数の2Dオブジェクトを同時にアニメーション化するのは比較的簡単です。これについては、UIViewをアニメーション化するか、CALayersをアニメートする2つの方法があります。私のテストでは、2つをアニメーション化するときのパフォーマンスの違いはほとんどありませんでした(両方とも、iPhoneで60 FPSで同時に約50個のオブジェクトが動き回るように見えます)。

UIViews一連のアニメーションを調整するには、開始/コミットアニメーションブロック内のビュージオメトリへの変更をラップすることをお勧めします:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; 

view1.frame = CGRectMake(newX1, newY1, view1Width, view1Height); 
view2.frame = CGRectMake(newX2, newY2, view2Width, view2Height); 
// Add other views here 

[UIView commitAnimations]; 

これは、2つ以上の動きを調整しますANIMATIONDURATIONINSECONDS秒の間、新しい位置に直線的に移動します。ビューを互いに独立して移動させたい場合は、ビューごとに別々のアニメーションブロックを作成します。

アニメーションをより詳細に制御したり、クロスプラットフォームのMac/iPhone UIコードを作成したりするには、Core Animation CALayersを使用することができます。 CALayersので、自動的に新しい位置にアニメーション化されます

layer.position = CGPointMake(newX, newY); 

あなたの層を設定することで、デフォルトでアニメーション化。デフォルトでは、レイヤーの位置はその中心を基準にしているので、anchorPointプロパティを0,0に設定することで、レイヤーの位置を通常の原点の位置に変更できます。あなたはCABasicAnimationsとCAKeyframeAnimationsを作成することができ、より高度なアニメーションについて

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration];  
layer1.position = CGPointMake(newX1, newY1); 
layer2.position = CGPointMake(newX2, newY2); 
[CATransaction commit]; 

と特定のタイミングと加速/減速と複雑なパスに沿ってそれらを移動するためにあなたの層にそれらを適用します。

あなたはCATransactionを使用してレイヤーのアニメーションを調整することができます。

+0

ブラッドさん、ありがとう、とても面白い! – Skyler

0

あなたはCocos2D-iphoneプロジェクトを見ましたか?

私は使い方が非常に簡単で、多くの手間がかかります。

Cocos2D iPhone

また、アニメーションの多くを行い、あなたが一緒に結び付けることができますアニメーションのシーケンスを作成することができます。

関連する問題