【问题标题】:iPhone SDK: Long animations with "animationImages" problemiPhone SDK:带有“animationImages”问题的长动画
【发布时间】:2009-06-17 19:11:53
【问题描述】:

我一直在尝试在 xcode 中设置动画很长一段时间,起初我开始尝试为 100 个 1000x1000 pngs 设置动画,但这些图像对于 iphone 来说太大了,现在我正在尝试为 100 个 320x480 pngs 设置动画它的动画效果似乎很好,直到大约 40 帧,然后应用程序崩溃,那么,有没有其他动画方法不能做到这一点?这可能只是因为这段代码加载了太多的图像供 iphone 处理,还有其他方法可以让应用程序停止崩溃吗?或者我可以优化这个 进一步编码? (顺便说一下,我是 iphone 平台的新手,所以在回答时请记住)

- (IBAction)startClick1:(id)sender{

spud123.animationImages = [NSArray arrayWithObjects:
                          [UIImage imageNamed: @"spud1230000.png"],
                          [UIImage imageNamed: @"spud1230001.png"],
                          [UIImage imageNamed: @"spud1230002.png"],
                          [UIImage imageNamed: @"spud1230003.png"],
                          [UIImage imageNamed: @"spud1230004.png"],
                          [UIImage imageNamed: @"spud1230005.png"],
                          [UIImage imageNamed: @"spud1230006.png"],
                          [UIImage imageNamed: @"spud1230007.png"],
                          [UIImage imageNamed: @"spud1230008.png"],
                          [UIImage imageNamed: @"spud1230009.png"],
                          [UIImage imageNamed: @"spud1230010.png"],
                          [UIImage imageNamed: @"spud1230011.png"],
                          [UIImage imageNamed: @"spud1230012.png"],
                          [UIImage imageNamed: @"spud1230013.png"],
                          [UIImage imageNamed: @"spud1230014.png"],
                          [UIImage imageNamed: @"spud1230015.png"],
                          [UIImage imageNamed: @"spud1230016.png"],
                          [UIImage imageNamed: @"spud1230017.png"],
                          [UIImage imageNamed: @"spud1230018.png"],
                          [UIImage imageNamed: @"spud1230019.png"],
                          [UIImage imageNamed: @"spud1230020.png"],
                          [UIImage imageNamed: @"spud1230021.png"],
                          [UIImage imageNamed: @"spud1230022.png"],
                          [UIImage imageNamed: @"spud1230023.png"],
                          [UIImage imageNamed: @"spud1230024.png"],
                          [UIImage imageNamed: @"spud1230025.png"],
                          [UIImage imageNamed: @"spud1230026.png"],
                          [UIImage imageNamed: @"spud1230027.png"],
                          [UIImage imageNamed: @"spud1230028.png"],
                          [UIImage imageNamed: @"spud1230029.png"],
                          [UIImage imageNamed: @"spud1230030.png"],
                          [UIImage imageNamed: @"spud1230031.png"],
                          [UIImage imageNamed: @"spud1230032.png"],
                          [UIImage imageNamed: @"spud1230033.png"],
                          [UIImage imageNamed: @"spud1230034.png"],
                          [UIImage imageNamed: @"spud1230035.png"],
                          //and so on to 100
                          nil];

[spud123 setAnimationRepeatCount:1];
spud123.animationDuration =5.7;
[spud123 startAnimating];

}

Ps:我试过 NSTimer,但我无法让它停止重复动画

【问题讨论】:

  • 哇!应该有某种方法可以为每个文件生成文件名,从而在运行时生成数组,这将为您节省大量输入/复制粘贴,并且不会创建此类不可维护的代码。
  • 嗯,好吧,当我真正让我的动画工作时,我会处理代码设置,不过我明白你的意思。
  • 你将使用 stopAnimating
  • 这看起来像一个重复:stackoverflow.com/questions/992770/… 请参阅我在上述问题中的帖子以获得最佳解决方案。

标签: iphone xcode animation


【解决方案1】:

这不是动画问题,而是设计问题。

首先,只需一步一步计算您的应用程序的内存需求: 解压缩后,这些 PNG 中的每一个都使用 614400 字节。所以其中一百个使用 61440000 字节:超过 60 兆字节。对手机的期望有点高。

如果您确实需要为每一帧显示不同的图像,您应该使用视频。视频有很多技术可以压缩图像并在顺序显示大量大图像时减少处理和内存需求。

如果您需要这是一个具有更多控制的动画,我建议您需要分析正在移动的内容并仅对其进行动画处理 - 绘制单个背景,然后在其上制作较小的图像。

最后,如果这种方法不起作用,您将不得不learn OpenGL 才能达到您需要的性能。

如果不了解您的应用的更多信息,很难提出建议。

【讨论】:

  • 好吧,我不介意使用视频,但它需要是透明视频,你知道任何有用的视频实现教程吗?你会说学习openGL有多难?有关于openGL的动画教程吗?你说我对手机的要求太多了,我看到其他开发人员在他们的应用程序中实现了更复杂的动画。无论如何感谢您的建议。
  • 您可能已经看到人们做的事情看起来像您想要的应用程序效果,但您没有看到有人将 100 个全屏图像显示为 UIImage 动画。
  • 嘿,Roger Nolan,我遇到了类似的问题,但是我的 png 是 320 x 480,大约 75 帧左右。我尝试压缩到 pvr,但它非常有损。不值得使用。我目前导入openGL的png大小约为78 mbs。但想知道我需要多大的尺寸才能把它降下来。一切顺利,keuminotti
  • 您通常可以在手机上获得 10Mb,但您不能依赖它。您需要一种不同的方法,或者去考虑不同的应用程序。
  • 谢谢瑞恩。我改变了我的策略,因为我发现动画中每个 png 的大小无关紧要,而是你在 openGL 动画中使用的帧数。您是否大致知道在处理器反应不佳之前您可以制作多少帧动画?我有大约 75 帧左右。一切顺利,keuminotti
【解决方案2】:

您需要仔细考虑您的应用程序内存使用情况,但只是为了让您知道选项,我已经成功使用了基于http://www.modejong.com/iPhone/PNGAnimatorDemo.zip 的修改类,它可以在第一代 iPad 硬件上处理 15fps 全屏(1024x768 ) png 动画。但请注意您的应用程序包大小。这绝对不是大多数应用程序的最佳选择。

【讨论】:

    【解决方案3】:

    动画中的帧通常非常相似。因此,一种可能的解决方案是加载一些图像......然后使用 OpenGL 为它们设置动画。这适用于,比如说,一个球弹跳。不确定您正在制作哪些图像。

    【讨论】:

    • 好吧,不要跳进去,我正在制作一个被扔到空中的警棍的动画,警棍有不同的角度,大约有 75 帧 pngs。但是有两套,一套是背景,然后是一系列的反式。接力棒的png。我想知道在什么时候或多少帧会使处理器反应不佳。
    • 听起来可以使用 OpenGL 轻松完成。一般的做法是每次调用渲染场景绘制背景,然后以特定的角度和高度绘制指挥棒(两者都随时间变化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多