Sprite Sheets Vs用于动画的PNG文件数组

时间:2012-07-19 18:20:40

标签: ios uiimageview sprite-sheet

我使用UIImageView.animationImages在iOS应用中制作了大量动画,方法是将UIImage对象数组传递给下面列出的动画方法。当前我的UIImage对象数组包含单独的PNG文件。我知道我可以使用&amp ;;做类似的动画。传递一个Sprite Sheet而不是传递一组单独的PNG文件。一个在另一个上有什么优点或者Sprite表是出于不同的目的?

- (void) startImageViewAnimation:(UIImageView *)imageView WithImages:(NSArray*)imageArray orBuildArrayWithImage:(NSString *)imageName duration:(CGFloat)duration repeatCount:(NSInteger)repeatCount soundFile:(NSString *)soundFile stopSoundAfterDuration:(CGFloat) stopSoundDuration
{

    if([imageName length] != 0)
    {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        UIImage *image;
        int index = 1;
        NSString *string;
        do
        {
            string = [NSString stringWithFormat:@"%@%02d.png", imageName, index++];
            image = [UIImage imageNamed:string];
            if(image)
                [array addObject:image];
        } while (image != nil);

        imageView.animationImages = array;
        [array release];
    }
    else
    {
        imageView.animationImages = imageArray;
    }
    imageView.animationDuration = duration;
    imageView.animationRepeatCount = repeatCount;
    [imageView startAnimating];

    if([soundFile length] != 0)
    {
        [self loadSoundEffectAudio:soundFile];
    }
}

1 个答案:

答案 0 :(得分:0)

Sprite表仅适用于非常小的动画,动画的所有帧都可以放入1" sheet"加载到内存然后diff x,y偏移用于访问不同的帧数据。如果你有一个更长的动画或一个更大的动画,那么精灵表根本没有任何价值。回到白天,角色精灵相当小,所以它们中的很多都可以放在一张纸上,然后像拳击一样的短动画可以快速动画,因为没有记忆需要从一帧到另一帧交换。除了最小的小动画外,你不应该使用UIImageView.animationImages,因为当使用合理大小的中等大小的动画时,它会耗尽内存并使你的设备崩溃。有关更好方法的更详细信息,请参阅我对此问题的回答How to do animations using images efficiently in iOS