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——顏色混合

分享到: 更多
筒子二八杠技巧口诀 时时彩高手交流论坛 精准幸运飞艇计划稳定版 365什么叫三式投注 重庆时时现场直播视频 重庆时时两期精准计划 捕鱼达人hd下载 抢庄牛牛技巧图解 网赌龙虎刷反水怎么做 福利彩票投注时间截止 大发快三大小单双技巧 11选5任五3胆拖8多少钱 幸运飞艇6码 大乐透2018春节停售时间 棋牌休闲炸金花游戏 竞彩足球比分即时比分