SpriteKit框架之SKTextureAtlas

耐力,是一种不显山露水的执着;是一种不惧风不畏雨的坚忍;是一种不图名不图利的忠诚。


纹理及其纹理集的简介


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

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


SKTextureAtlas的使用


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

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

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

上面已经把纹理集添加到工程中了,万事俱备只欠东风,接下来在工程中新建一个名为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的使用💾
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,885评论 25 709
  • iOS 苹果官方Demo合集 字数10517阅读21059评论18喜欢144 其实, 开发了这么久, 不得不说, ...
    bingo居然被占了阅读 10,325评论 2 31
  • 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共...
    wo不懂阅读 1,510评论 3 3
  • 天地清澈 你的眼无边辽阔 将远方踩在脚下 攀上这高原尽头 太阳哺乳万物 你的心纳尽百川 风吹动的声音 传达到下一个...
    在山中的李老师阅读 774评论 3 1
  • 已是黄昏独自愁 更著风和雨 要么飞扬 要么沉寂 物是人非事事休 欲语泪先流 鸟儿歌声渐远 孤夜伴舞华灯...
    丹丹zjp阅读 320评论 0 0