快速动画与大图像

时间:2013-03-19 10:32:21

标签: objective-c xcode animation cocos2d-iphone uiimage

我有一项任务是为iPad2制作简单的动画,例如:http://www.subaru.jp/legacy/b4/index2.html

用户可以简单地向左和向右滑动,物体在其垂直轴上可视地旋转。我认为最简单的方法是使用cocos2d中的UIImage或CCSprite,使用图像设置数组并根据触摸更改图像。图像的大小计划为1024x768(全屏),每秒至少15-20个图像,以实现更流畅的动画。问题是:这样做是否可能非常顺利?对于这样的事情,iPad2的真正限制是什么?如果它落后于界限,我怎么能以其他方式实现这种行为呢?

2 个答案:

答案 0 :(得分:2)

好的,让我们运行数学:

每秒15次1024x768张图像。如果您使用4096x4096纹理地图集,则可以将它们全部放入单个纹理图集中。这包括1秒钟。

这意味着你需要每秒加载另一个纹理图集。在内存中最多可以有2-3个这样的纹理图集(保守地每个使用64 MB内存)。

真正使这个可行的唯一方法是使用.PVR.CCZ纹理地图集来增加加载时间并减少内存使用。您仍然需要经常加载/卸载纹理图集(几秒钟内)。因此,您应该测试加载4k .PVR.CCZ纹理的速度以及是否会影响速度。

如果速度太慢(我怀疑它会是这样),你将不得不使用1024x1024 .pvr.ccz纹理(单帧)并使用CCTextureCache异步方法提前缓存4个或更多纹理(和非缓存)您当前正在替换的纹理),以便在背景中加载新纹理并且不会影响动画速度。

由于这是关于旋转的,因此您必须确保在任一方向上至少有一个,更好的两个帧在缓存中。由于旋转可以以各种速度发生,因此用户可能仍会遇到延迟。

您应该尽可能地进一步减少纹理的颜色位深度,直到它对图像质量产生太大影响。

如果你应用书中的每一个技巧,我相信它是可行的。但它不会像“播放动画”一样简单并且可以用它完成。如果那就是你想知道的。

答案 1 :(得分:1)

之前我做过类似的事情,但是使用带有UIWebView控件的JS库,库名是UIZE,请检查example。我用了大约100张大小为1024×655的图像,它非常流畅。

从大小下载库,按以下方式组织文件夹:

  • rotation3d
    • 示例
      • 3D-旋转viewer.html
  • 图像
    • 图像文件
  • JS
    • 库文件。

在您的objective-C类中,使用以下代码在UIWebView中加载html页面:

NSString *path = [[NSBundle mainBundle]
                  pathForResource:@"3d-rotation-viewer"
                  ofType:@"html"
                  inDirectory:@"rotation3d/example" ];

NSURL *urls = [NSURL fileURLWithPath:path];

NSString *theAbsoluteURLString = [urls absoluteString];

NSString *queryStrings = @"?param1=something";//Parameters to pass to your html page

NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString: queryStrings];  

NSURL *finalURL = [NSURL URLWithString: absoluteURLwithQueryString];

NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ];

[webViews loadRequest:request];