我有一项任务是为iPad2制作简单的动画,例如:http://www.subaru.jp/legacy/b4/index2.html
用户可以简单地向左和向右滑动,物体在其垂直轴上可视地旋转。我认为最简单的方法是使用cocos2d中的UIImage或CCSprite,使用图像设置数组并根据触摸更改图像。图像的大小计划为1024x768(全屏),每秒至少15-20个图像,以实现更流畅的动画。问题是:这样做是否可能非常顺利?对于这样的事情,iPad2的真正限制是什么?如果它落后于界限,我怎么能以其他方式实现这种行为呢?
答案 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的图像,它非常流畅。
从大小下载库,按以下方式组织文件夹:
在您的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];