ゲームの複数のピースをアニメーション化したいのですが、それらのピースを異なる方向に移動させたいので、ビュー全体をアニメーション化する現在の方法は機能しなくなります。
一度に複数のアイテムをアニメーション化するためのベストプラクティスは何でしょうか。(私は2Dでレンダリングしているので、現在3Dソリューションには興味がないことに注意してください。)
ありがとう!
ゲームの複数のピースをアニメーション化したいのですが、それらのピースを異なる方向に移動させたいので、ビュー全体をアニメーション化する現在の方法は機能しなくなります。
一度に複数のアイテムをアニメーション化するためのベストプラクティスは何でしょうか。(私は2Dでレンダリングしているので、現在3Dソリューションには興味がないことに注意してください。)
ありがとう!
複数の 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 を作成し、それらをレイヤーに適用して、特定のタイミングと加速/減速で複雑なパスに沿ってそれらを移動できます。
Cocos2D-iphone プロジェクトを見ましたか?
とても使いやすく、手間がかからないと思います。
また、多くのアニメーションを実行し、結合できる一連のアニメーションを作成できます。