【发布时间】:2012-08-13 04:55:52
【问题描述】:
我正在制作一个有胜利状态和失败状态的游戏。对于每个状态,我想显示一个 2-3 秒的短动画。第一个动画由 60 个 PNG 组成,速率为 30 fps,第二个动画由 80 个 PNG 组成,也是 30 fps。我尝试了各种方法,并广泛搜索了解决方案,但我一直发现的前两个结果是使用 UIImageView animationImages 和 Core Animation。在模拟器中使用 UIImageView 效果很好,但第一次在设备上运行需要很长时间。我认为这是因为图像需要加载到内存中。我正在使用“imageNamed”来填充animationImages数组,但我猜他们需要在第一次调用动画时渲染?我已经尝试在应用程序加载时预渲染它们,这似乎可以解决问题,但是预渲染所有这些图像需要将近 10 秒,这对用户不友好。我也愿意使用 Core Animation,但我对它的了解非常有限,因此非常感谢详细的解释。谢谢!
当您说我需要在应用启动时加载所有内容时,您究竟是什么意思?现在,我在应用加载时初始化两个动画图像数组,如下所示:
// Create thinnestAnimation Array
thinnestAnimation = [[NSMutableArray alloc] init];
for(int i = 1; i <= 60; i++)
{
UIImage *thinImage = [UIImage imageNamed:[NSString stringWithFormat:@"ThinnestJump_%d.png", i]];
[thinnestAnimation addObject:thinImage];
}
thinAnimationImageView.animationImages = (NSArray *)thinnestAnimation;
thinAnimationImageView.animationDuration = 2.0;
thinAnimationImageView.animationRepeatCount = 1;
thinAnimationImageView 是我界面中的一个 IBOutlet,当我想为图像序列设置动画时,我调用了[thinAnimationImageView startAnimating];。这严重滞后于第一次通话,但此后很好。有没有办法防止它第一次滞后?
【问题讨论】:
-
抱歉,动画的计算成本很高。 Apple尽可能地编写了UIImageView。使用它。
-
如果你有预渲染的帧,你只想按顺序绘制,那么核心动画不会真正帮助你;它更适用于涉及移动或转换现有图像(或一组图像)和/或添加某些特殊效果的动画。现在,如果您想要的视觉效果符合该描述,您可以使用 CA 代替您的图像序列。
-
您还可以研究如何优化图像。他们有阿尔法吗?他们真的需要吗?屏幕的大面积是每帧都在变化,还是只是一小部分?它作为视频可能会更好吗?
标签: iphone image animation sequence