SpriteKit框架之SKTextureAtlas

耐力,是一种不显山露水的执着;是一种不惧风不畏雨的坚忍;是一种不图名不图利的忠诚。
SpriteKit框架之SKTextureAtlas_第1张图片


纹理及其纹理集的简介


在 SpriteKit框架之浅谈SKNode及SKSpriteNode 这一篇文章中,曾经说到SKSpriteNode对象的创建方式一共是有两种的,一种是直接使用屠屏或者图片名称创建,一种是使用则是使用纹理创建,其实相比直接使用图片名称创建,使用纹理创建精灵更加的麻烦,但是为什么还是要有纹理这个创建精灵的方法呢?因为纹理一般是配合着纹理集使用的. 一个纹理集实例是一个相关的纹理的集合。它是通过一个保存在app包中的纹理集来加载的。使用纹理集可以使纹理的加载和使用更加高效。例如,如果你有一个屏幕需要绘制不同的纹理,Sprite Kit分开绘制这些纹理。如果所有的这些纹理来自同一个纹理集,那么Sprite Kit可以一次就把这些纹理全部绘制完。每当你有一些纹理总是在一起绘制,你应该把它们加到一个纹理集中.

例如下面的游戏素材中,如果我们一个一个的绘制,不仅会造成时间的浪费而是还有空间的浪费.时间的浪费就是来源于程序是一张一张图片的绘制,而使用纹理集是一次性把所有的图片绘制完成.那么空间上浪费呢?由于使用纹理集绘制纹理是把所有图片一次性绘制完成的,而且是绘制在一张图片上,把很多的空间充分的利用.所以说这样占用的空间更小.

SpriteKit框架之SKTextureAtlas_第2张图片


SKTextureAtlas的使用


对于纹理图集,那你可以把它想象为一副很大的图片,其中包括动画中需要使用到的各种图片。这个图集可以看做是一个文件,它指定了每个sprite的边界范围,当在代码中需要使用时,可以将这些sprite取出来。下面我们就拿一个炸弹爆炸效果的来看一下纹理集是怎么使用的.

首先,我们需要创建一个后缀为.atlas文件夹并把所有的图片素材添加进去.这样Xcode就能识别出.atlas扩展名,进而自动的将图片合并为一个纹理图集。如图所示.

SpriteKit框架之SKTextureAtlas_第3张图片

接下来把纹理文件夹添加到工程当中.

SpriteKit框架之SKTextureAtlas_第4张图片

上面已经把纹理集添加到工程中了,万事俱备只欠东风,接下来在工程中新建一个名为GameScene的场景.然后创建一个SKTextureAtlas对象,代码如下.

    SKTextureAtlas *iOSTextureAtlas = [SKTextureAtlas atlasNamed:@"iOS"];

纹理集创建完成了,该如何使用呢?SKTextureAtlas有一个属性叫做textureNames,是一个数组类型,数组存储的是各个纹理的名称,我们可以通过这个数组取出对应的纹理,因为我们要制作一个爆炸效果,所以我们要把所有的纹理取出来.我们新建一个可变数组来接受所有的纹理.代码如下.

    NSMutableArray *allTextureArray = [NSMutableArray arrayWithCapacity:16];
    
    for (int i = 0; i < iOSTextureAtlas.textureNames.count; i++) {
        
        NSString *textureName = [NSString stringWithFormat:@"image%d.png",i*2+20];
        
        SKTexture *texture = [iOSTextureAtlas textureNamed:textureName];
        
        [allTextureArray addObject:textureName];
    
    }

现在allTextureArray中存储了所有的纹理对象,接下来,我们就创建一个SKSpriteNode对象,并且给它添加上动画,代码如下.

    SKSpriteNode *bombNode = [SKSpriteNode spriteNodeWithTexture:allTextureArray[0]];
    
    bombNode.position = CGPointMake(self.size.width/2, self.size.height/2);
    
    bombNode.anchorPoint = CGPointMake(0.5, 0.5);
    
    [self addChild:bombNode];
    
    //爆炸效果动画
    SKAction *animationAction = [SKAction animateWithTextures:allTextureArray timePerFrame:0.08];
    
    //repeatActionForever这个动作的效果是让动画重复执行.
    [bombNode runAction: [SKAction repeatActionForever:animationAction]];

我们看一下工程运行之后的效果图.


SpriteKit框架中的SKTextureAtlas相关内容就说到这了,最后双手奉上本文中的Demo,希望对其学习过程中有所帮助.谢谢
-->SKTextureAtlas的使用

你可能感兴趣的:(SpriteKit框架之SKTextureAtlas)