为PNG序列设置动画的最佳或推荐技术是什么 继承了我所学到的知识:
手动执行
使用包含字符串的MutableArrays,您可以使用计时器为UIImageView设置动画,该计时器会增加索引号
UIImage - 动画方法
这是有效的,唯一的问题是找到一个图像是否完成了它的动画,你必须检查isAnimating BOOL,并且为此你需要一个计时器。
什么是最好的并推荐?
想要做Oldschool游戏精灵动画, 即:
空闲动画
攻击动画
步行动画
等...
如果有人有事,请告诉我。
@lessfame
答案 0 :(得分:11)
动画箭头的示例
UIImage* img1 = [UIImage imageNamed:@"fleche1.png"];
UIImage* img2 = [UIImage imageNamed:@"fleche2.png"];
NSArray *images = [NSArray arrayWithObjects:img1,img2, nil];
UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 160.0, 160.0)];
[imageView setAnimationImages:images];
[imageView setAnimationRepeatCount:100];
[imageView setAnimationDuration:3.0];
imageView.center = myView.center;
[imageView startAnimating];
[myView addSubview:imageView];
[imageView release];
答案 1 :(得分:2)
最简单的方法是使用Core Animation图层进行精灵动画:
制作精灵所有各种动作的“多单元”图像条(可以是PNG或JPG)。使每个'单元'都是固定的高度或宽度。
将图像放入UIImageView中。
获取视图的CALayer,并调整图层的contentsRect
属性。这充当精灵的剪切矩形。要为精灵设置动画,您只需将contentsRect
移动到图像条中的下一个单元格位置即可。
这样的事情会做到(假设你已经计算过newSpritePosition。
[CATransaction begin];
[CATransaction setDisableActions:YES];
spriteLayer.contentsRect = newSpritePosition;
[CATransaction commit];
(如果你不做第二行,那么你将得到一个默认的幻灯片动画,而不是'跳'到下一个状态。)
使用这种技术,你可以旋转精灵的所有帧 - 就像一本翻书。 CALAyer交易经过优化,因此您可以获得相当快的帧速率。您可以设置animationDidStop
完成处理程序以移动到精灵的下一个状态或循环回到开始帧。
答案 2 :(得分:0)
这取决于你将如何使用精灵。如果你只需要一个简单的循环精灵,那么UIImage方法就很棒了。如果您想要更精细的控制,那么您将更乐意将图像加载到数组中并使用NSTimer
循环来处理时序。我个人最常使用数组方法,因为它在将来会留下更多选项(比如检测动画何时完成)。还有一个建议是查看cocos2d项目。它的精灵比这些建议更强大。
答案 3 :(得分:0)
正如我在another answer中所说,我发现这是一个好方法:PNG Animation method by Moses DeJong
从他的话来说:
此示例实现了一个面向动画的视图控制器,它只需等待读取帧的PNG图像数据,直到需要它为止。这个类运行在大约半兆内存中,而第二代iPhone上的CPU利用率约为5-10%,而不是分配多兆字节。
我仍然不确定它是如何完成的。我相信它基本上使用UIImageView来缓存AVAudioPlayer。