1

ゲームの複数のピースをアニメーション化したいのですが、それらのピースを異なる方向に移動させたいので、ビュー全体をアニメーション化する現在の方法は機能しなくなります。

一度に複数のアイテムをアニメーション化するためのベストプラクティスは何でしょうか。(私は2Dでレンダリングしているので、現在3Dソリューションには興味がないことに注意してください。)

ありがとう!

4

2 に答える 2

8

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

一連の UIView のアニメーションを調整するには、ビュー ジオメトリへの変更を begin / commit アニメーション ブロックでラップする必要があります。

[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);

レイヤーは新しい位置に自動的にアニメーション化されます。デフォルトでは、レイヤーの位置はその中心に対して相対的であることに注意してください。アンカーポイント プロパティを 0,0 に設定することで、通常の原点位置に変更できます。

CATransaction を使用してレイヤー アニメーションを調整できます。

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

より高度なアニメーションについては、CABasicAnimations と CAKeyframeAnimations を作成し、それらをレイヤーに適用して、特定のタイミングと加速/減速で複雑なパスに沿ってそれらを移動できます。

于 2009-03-31T13:23:51.593 に答える
0

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

とても使いやすく、手間がかからないと思います。

Cocos2D iPhone

また、多くのアニメーションを実行し、結合できる一連のアニメーションを作成できます。

于 2009-03-31T06:17:21.913 に答える