1

我想为一个游戏制作多个部分的动画,并且我想让这些部分朝不同的方向移动,这样我当前为整个视图制作动画的方法将不再有效。

我想知道一次为多个项目设置动画的最佳做法是什么。(注意我在 2d 中渲染,所以我目前对 3d 解决方案不感兴趣。)

谢谢!

4

2 回答 2

8

一次为多个二维对象设置动画相对容易。有两种方法可以实现:动画 UIView 或动画 CALayers。在我的测试中,我发现在为两者设置动画时性能几乎没有差异(两者似乎都支持在 iPhone 上以 60 FPS 的速度同时移动约 50 个对象)。

为了协调一系列 UIView 的动画,您需要将视图几何的任何更改包装在开始/提交动画块中:

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

这将在 ANIMATIONDURATIONINSECONDS 秒的持续时间内将两个或多个视图的直线运动协调到它们的新位置。如果您希望视图彼此独立移动,请为每个视图创建单独的动画块。

为了更好地控制您的动画,或创建跨平台的 Mac / iPhone UI 代码,您可能希望使用 Core Animation CALayers。CALayers 默认动画,所以通过设置

layer.position = CGPointMake(newX, newY);

您的图层将自动动画到新位置。请注意,默认情况下,图层的位置是相对于其中心的,您可以通过将其 anchorPoint 属性设置为 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 回答