Obj-C大量圖片構成動畫的實現

準備實現一個由大量圖片(?。┕鉤啥姆槳?,查詢良久,寫個總結。

主要方案有3個,

1、通過unity 3d來做3d的動畫模型出來,然后進行貼圖的操作,該方案沒有深究。

2、Cocos2d的庫來做動畫,這種動畫方式又分為兩個方案。

1)通過TP等來形成動畫幀,這需要對動畫幀圖片進行一個預處理。生成對應的plist文件。缺點是如果過多的動畫?。ū熱?/span>100個圖)集結在一個plist描述里面載入會非常慢,即使采用RGBA4444進行一個優化也較慢。

動畫實現的代碼主要是:

[[CCSpriteFrameCachesharedSpriteFrameCache] addSpriteFramesWithFile: @"xxx.plist"];

CCSpriteBatchNode * spirteSheet = [CCSpriteBatchNode batchNodeWithFile:@"xxx.png"];

[self addChild:spirteSheet];

 

NSMutableArray *animFrames = [NSMutableArray array];

for(int i =1; i <=8; ++i) {

  [animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"xxx%d.png", i]]];

復制代碼

2) 對每一幀進行一個單獨的圖片載入和緩存,這個同樣存在過多圖片緩存的問題,iTouch上每次載入大概40張左右的幀圖片(320*480)即會出現錯誤。不過少量的幀動畫仍然是不錯的選擇。對應的動畫實現代碼:

+ (CCAnimation *) animationWithAllFile:(NSString *)imageName frameCount:(int)frameCount delay:(float)delay{

    NSMutableArray * frames = [NSMutableArray arrayWithCapacity:frameCount];

    for (int i = 0; i < frameCount; ++i) {

        NSString * file = [NSString stringWithFormat:@"%@%i.jpg",imageName,i];

        CCTexture2D * texture = [[CCTextureCache sharedTextureCache] addImage:file];

        

        CGSize texSize = texture.contentSizeInPixels;

        CGRect texRect = CGRectMake(0, 0, texSize.width, texSize.height);

        CCSpriteFrame * frame = [CCSpriteFrame frameWithTexture:texture rect:texRect];

        [frames addObject:frame];

    }

    return [CCAnimation animationWithFrames:frames delay:delay];

}

復制代碼

3、直接用UIImageView的自帶動畫來實現,本來以為這種方式可能太弱了,沒想到嘗試的結果頗為滿意。連續播放幀圖片達80張依然很流暢,內部緩存方式就不深究了。具體實現方式如下:

NSMutableArray * animateArray = [[NSMutableArray alloc] initWithCapacity:80];

for (int i = 0; i < 78; ++i) {

    NSString * file = [NSString stringWithFormat:@"%@%i",@"eating_",i];

    [animateArray addObject:[UIImage imageWithContentsOfFile:

                                 [[NSBundle mainBundle] pathForResource:file ofType:@"jpg"]]];

}

animImage.animationImages = animateArray;

animImage.animationDuration = 3.0;

animImage.animationRepeatCount = 0;


來源:Andy Wang 博客園

上一篇: [iOS開發必備知識之] Category & Protocol-

下一篇: 深入了解OpenGL——顏色混合

分享到: 更多
双面盘对打 上海时时彩 ag时间差漏洞 重庆时时彩20分钟一期 极速时时什么软件 11选5稳赚不赔心得 幸运飞艇冠军三码计划 稳赚时时彩技巧方法 足球比分直播即时比分 全天pk10 那个足球投注网站靠谱 ac米兰 北京pk10计划开奖 七乐彩怎么算中奖 全天飞艇免费计划一期 LG游戏平台