14.精灵进阶之干活篇下

来源:互联网 发布:暴风影音飞屏 for mac 编辑:程序博客网 时间:2024/04/28 13:10

14.精灵进阶之干活篇下

首先请允许为我们的团队博客Optional Swift 介绍一番,提供swift基础入门教程讲解,框架学习,UI设计,控件学习等等

optional swift team 博客地址

前文有提供了一种创建纹理的构造方法,具体是怎么实现的呢?Sprite Kit首先是通过明确的文件名来查找图片文件(非纹理图集),假如没有找到,那么它将遍历app bundle中的所有纹理图集。这意味着游戏项目中,你无需对代码做出更改来支持这种情况。当你设计完图片,往纹理图集一扔即可,它将自动包含,你不要重新build

接下来讨论SKTextureAtlas,当你想要明确对某一个纹理图集进行操作,那么使用它再好不过!首先创建一个纹理图形对象(texture atlas object);接下来,使用纹理的名字来添加到刚才创建的纹理图集中。下面的例子是有实际开发意义的,怪物的行走就是通过一个纹理图集(包含多张纹理,玩过gif的朋友应该知道,其实gif也就是由多张连续图片组成)来Animate的。假象在我们实际的工程中,我们已经添加了一个monster.atlas文件夹,里面有4张图片,实现代码如下:

    //创建纹理图集    let atlas = SKTextureAtlas(named: "monster")    //创建纹理    let f1 = atlas.textureNamed("monster-walk1")    let f2 = atlas.textureNamed("monster-walk2")    let f3 = atlas.textureNamed("monster-walk3")    let f4 = atlas.textureNamed("monster-walk4")    //创建一个数组包含  f1 f2 f3 f4属于atlas这个图集的    let monsterWalkTextures = [f1,f2,f3,f4]

注:
一帧就是一张图片!

创建纹理方式二

首先再次聊到纹理,就是可复用图片,我们多次用到了SKTexture来创建一个纹理,非常酷!本节介绍另外一种方法,说来也有点意思,既然纹理是一张图片,我们是否可以截取图片的”一角”来创建新的纹理呢?答案自然是肯定的,创建的纹理类型依然是SKTexture,代码如下:

    //cornerTextures 类型是SKTexture    let bottomLeftTexture = SKTexture(rect: CGRectMake(0.0, 0.0, 0.5, 0.5), inTexture: cornerTextures)

让精灵动起来!

精灵(Sprite)的纹理属性(texture)指向当前纹理(即当前赋予的)!觉得单调?换掉它!这样精灵的纹理属性就指向了我们喜欢的纹理了。下一次场景进行渲染时,就会改成新的纹理。不过,任何时候替换成新的纹理,我们可能还需要对其他属性进行设置,例如:sizeanchorPointcenterRect。通常我们最好保证设计好的一套纹理图册中的图片大小都是一致的,我可不想游戏中人物形象忽大忽小搞的像变身似的~

下面来让我们的怪物动起来!这一下子让人联想到Action,要知道我们的纹理图册其实就是一些连续的图片。我们创建这么一个动作,可以让其有序的切换图片,不就是在播放动作了吗?

你可以这么玩,当然假如你的朋友和你够铁的话….
和他视频,然后狂按截屏,来个百来张,打开个存储的文件夹,然后一张张切换看,不就是一个动画吗(除非他不动~)?这个和我们异曲同工。接下来是代码。

//这样创建一个动作 每隔0.1秒换一张纹理 当然我们传入的是一个纹理数组,内部怎么做不关心let walkAnimation = SKAction.animateWithTextures(monsterWalkTextures, timePerFrame: 0.1)//让精灵动起来monster.runAction(walkAnimation)

办完正事纹理走开!

要知道图形硬件将纹理加载到内存之后,是始终保存着的,直到SKTexture对象被删除。所以在删除的时候我们必须考虑很多,因为那些对它具有强引用的对象都要受此(删除)影响!具体包括:

  • 引用了该纹理的所有 SKSpriteNodeSKEffectNode 对象
  • 代码中对该纹理具有强引用(strong references)关系的所有东东
  • SKTextureAtals对象自然也不用说 ,还不是包含了这个纹理的原因哈

结尾:
本节对纹理进一步了解,我认为要对概念理解透彻,至于应用非常简单,所以不用担心。
接下来是对Action的展开讨论!

1 0