草庐IT

iphone - iOS逐帧动画,按脚本

coder 2023-09-30 原文

关于逐帧动画有一些SO问题(例如frame by frame animation和其他类似问题),但是我觉得我的观点有所不同,因此请继续。

这部分是来自iOS经验很少的人提出的设计问题。

我不确定“逐帧”是我想要做什么的正确描述,所以让我来描述一下。基本上,我有一个动画电影的“脚本”,我想播放此脚本。
该脚本是一个json文件,它描述了一组场景。在每个场景中,都有一些元素,例如背景图像,演员列表及其位置和背景声音剪辑。此外,对于每个演员和背景,都有一个表示它的图像文件。 (这有点复杂-每个演员都有一个“行为”,如眨眼,讲话方式等)。因此,我的工作是遵循给定脚本引用演员和背景,并在每一帧中将演员放置在指定位置,绘制正确的背景并播放声音文件。
类似于youtube的电影播放器​​功能,电影可以暂停,前进或后退。
我所看到的大多数有关逐帧动画的问题都与我有不同的要求(我将在后面列出更多要求)。他们通常建议使用UIImageView的animationImages属性。这对于设置按钮或复选框的动画效果很好,但是它们都假定需要播放一小段预定义的图像。
如果要使用animationImages,则必须预先创建所有图像,而我的纯粹猜测是它不会缩放(想想一分钟约30 fps,您将获得60 * 30 = 1800图像。在这种情况下,磨砂和暂停/播放功能似乎很有挑战性)。

因此,我正在寻找正确的方法来做到这一点。我的直觉是,我可能会通过三种或四种主要方法来实现这一目标,而我在此过程中学到的更多。

  • 通过使用Core Animations并定义“关键点”并为这些关键点设置动画过渡。例如,如果一个演员需要在时间t1到达A点,在时间t2到达B点,那么我所要做的就是使它们之间的动画。过去,我在ActionScript中做过类似的事情,这很好,但是在执行scrub动作并使所有内容保持同步方面特别具有挑战性,因此我不喜欢这种方法。想象一下,您必须在动画的中间实现暂停或将其拖到动画的中间。可行但不愉快。
  • 设置一个计时器,例如说每秒30次,每次滴答时都要咨询模型(模型是脚本json文件以及演员和背景的描述),并绘制此时需要绘制的内容。使用Quartz 2D的API和drawRect。这可能是简单的方法,但是我没有足够的经验来说明它在不同设备上的运行情况,也许是在CPU方面,这完全取决于我需要在每个刻度上进行的计算量以及iOS绘制所有内容所需的努力。我没有预感。
  • 与2相似,但是使用OpenGL绘制。我更喜欢2 b / c,API比较容易,但是资源明智的OpenGL更合适。
  • 使用像cocos2d这样的游戏框架,我之前从未使用过,但似乎正在解决或多或少的类似问题。他们似乎有一个不错的API,所以如果我能找到他们回答的所有要求,我会很高兴。

  • 在我刚刚描述的要求之上(鉴于电影的“脚本”文件以及演员,背景和声音的描述,播放一部电影),还有另一组要求-
  • 影片需要以全屏模式或部分屏幕模式(屏幕的其余部分专用于其他控件)播放
  • 我从iphone开始,自然应该跟随ipad。
  • 我希望能够为本地电话创建此电影的缩略图(在我的应用程序的库中显示)。缩略图可能只是电影的第一帧。
  • 我希望能够将结果“导出”为电影,并且可以轻松将其上传到youtube或facebook。

  • 因此,这里最大的问题是,我想到的任何建议的1-4实现(或您可能会建议的其他实现)是否都能以某种方式导出此类电影。
    如果所有四个都未能完成影片导出任务,那么我会考虑其他选择。替代方法是使用运行ffmpeg的服务器,该服务器接受一捆所有的电影图像(我必须将它们绘制在电话中,并按其顺序将其上传到服务器),然后服务器将编译所有图像配乐到一部电影。
    显然,为了简化起见,我宁愿不使用服务器,即能够从iphone导出电影,但是如果要求太多,那么最后的要求是至少能够导出所有内容。图片(电影中的关键帧),因此我可以将它们捆绑并上传到服务器。

    电影的长度应该是一到两分钟。我希望这个问题不会太长,而且很清楚...

    谢谢!

    最佳答案

    写得很好的问题。对于您的视频导出需求,请查看AVFoundation(自iOS 4起可用)。如果要实现此目的,请尝试#1或#4。我认为#1可能是最快尝试的方法,但这可能是因为我对cocos2d没有任何经验。我认为您将能够暂停和清理CoreAnimation:查看它采用的CAMediaTiming协议。

    关于iphone - iOS逐帧动画,按脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5960458/

    有关iphone - iOS逐帧动画,按脚本的更多相关文章

    1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

      我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

    2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

      我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

    3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

      这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

    4. Ruby 文件 IO 定界符? - 2

      我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

    5. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

      Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

    6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

      1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

    7. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

      //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

    8. ruby - 确定 ruby​​ 脚本是否已经在运行 - 2

      有没有一种简单的方法可以判断ruby​​脚本是否已经在运行,然后适本地处理它?例如:我有一个名为really_long_script.rb的脚本。我让它每5分钟运行一次。当它运行时,我想看看之前运行的是否还在运行,然后停止第二个脚本的执行。有什么想法吗? 最佳答案 ps是一种非常糟糕的方法,并且可能会出现竞争条件。传统的Unix/Linux方法是将PID写入文件(通常在/var/run中)并在启动时检查该文件是否存在。例如pid文件位于/var/run/myscript.pid然后你会在运行程序之前检查它是否存在。有一些技巧可以避免

    9. ruby - ruby 脚本可以预编译成二进制文件吗? - 2

      我正在开发一个Ruby脚本,需要在没有Ruby解释器的情况下部署到系统上。它将需要在使用ELF格式的FreeBSD系统上运行。我知道有一个ruby​​2exe项目可以编译在Windows上运行的ruby​​脚本,但是在其他操作系统上这样做容易吗?甚至可能吗? 最佳答案 您是否检查过Rubinius或JRuby是否允许您预编译您的代码? 关于ruby-ruby脚本可以预编译成二进制文件吗?,我们在StackOverflow上找到一个类似的问题: https://

    10. ruby - 为什么不能使用类IO的实例方法noecho? - 2

      print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

    随机推荐