说我需要制作几个全屏动画,每个动画包含大约500帧。 动画应该以合理的速度播放 - 据说不低于20fps - 图片应该是合理的质量,而不是过度压缩。
您认为我应该使用哪种方法?
到目前为止,我试过了:
1. storing each frame as a compressed JPEG
2. before animation starts, loading each frame into a byteArray
3. as the animation plays, decode corresponding byteArray into a bitmap
and draw it on a surface view.
问题 - 速度太低,通常约为5-10 FPS。
我想到了另外两个选择。
将所有动画转换为一个电影文件......但我想可能会出现启动,暂停和寻找完全正确的框架的问题......你怎么看?
我想到的另一个选择是使用OPENGL(虽然之前从未使用过它),逐帧播放动画。你觉得怎样才能处理呢?
谢谢!
编辑,我设法窥探了talktom,发现它包含大约20megs的压缩良好的JPEG,就像这样。
答案 0 :(得分:3)
您可以通过几种不同的方式处理它。
听起来解码是你的瓶颈。您可以尝试在播放动画之前完成所有3个步骤,包括解码,因此您只需绘制已经转换的位图。
OpenGL绝对可以胜任任务,因为它可能永远不会成为你的瓶颈。但如上所述,图纸似乎不是问题。
在设备上制作动画。如果您要为几何对象或像素图设置动画并且动画具有可以重复使用的通用背景,请将动画分离为“演员”并移动它们 - 这将需要更少的数据。
编辑:移动设备上的复杂动画很少是全屏电影或一系列图像 - (冗余)数据的数量将是压倒性的(正如您已经注意到的那样)。它们是动画2D和3D模型。对于3D,建议使用OpenGL,对于2D,常见的画布绘图可能就足够了。为了提高效率,您可以将模型拆分为单独的部分并单独制作动画(看起来类似于SouthPark动画)。您可以将此与使用spritesheets(如单独的小电影条)结合使用来为单独的部分设置动画。这样可以提供更大的灵活性,同时仍然使用比压缩电影更少的数据。
答案 1 :(得分:2)
我真的认为你需要把它变成一个电影文件 - 它会给你一些适当的压缩,android可以用媒体播放器完成所有的工作。我相信到达正确的框架相当容易,但您可能必须在视频流上使用较低的压缩才能使其正常工作。
答案 2 :(得分:1)
使用universal tween engine 可能会解决您的性能问题。