13.精灵进阶之干活篇上
前文曾提及一种创建有纹理的精灵一步到位的方法,即在创建sprite
同时也创建了相应地texture
,不知客官还有印象。无疑这是一种简便的方法,但往往在实际开发一款复杂游戏时,你需要全盘接管纹理,比如遇到以下几种情况:
- 多精灵之间共用一个纹理(简单理解成可复用的图片吧,虽然不是很恰当)。
- 假如已经创建完一个有纹理精灵,此时你想更换一个新的纹理给它。
- 采用一个纹理集合制作精灵动画。
- 有时候创建纹理的数据并非来自于app bundle,比如从网络下载。
- 将纹理预(提前)加载到内存中,当然是在呈现场景之前。
接下来我们将频繁接触SKTexture
对象,生成纹理之后在使用它来创建一个新的精灵或为已存在的精灵“换装”。
加载App Bundle中的图片创建纹理
我想这是最常用的方法了,当你的设计师为你设计好一套图片,由你导入应用中,然后在实际代码中加载即可。通常代码是这样写的:
//代码纯手工打入,且已简单形式给出 关键部分必定详细
//只创建一次纹理即可 所以叫可复用图片 也就是多次使用
let rocketTexture = SKTexture(imageNamed:"rocket.png")
for i = 0;i<0;i++{
let rocket = SKSpriteNode(texture:rocketTexture)
rocket.position = ... //自己定吧
self.addChild(rocket)
}
有时候纹理对象本身就好比一个占位符,不过已经包含了实打实的纹理数据(记住:程序都是0、1组成,到最后都是一串0、1),或许是因为纹理数据资源占用量大(我的理解),所以Sprite Kit 只会在有需要时才加载到内存中。
使用纹理图册(Texture Atlases)
实际开发中,我们会有灰常灰常多的图片,如果细分之下或许被归类到不同分类之中,比如人物的面貌一类、怪物的面貌一类、背景一类等等,这样有效的管理自然Sprite Kit
也是支持的,也就是Texture Atlases
,怎么划分来的合理呢?官方文档给了以下几种:
- 一个人物的动画帧(比如一套技能动作或者人物行进动作 往往就是几张或十几张图片组成)。
- 游戏的关卡图片。
- 一些控件的图片(
button
,switch
,slider
等)
试想下,假如我们不有效管理这些散乱的对象,SpriteKit
和图形硬件估计要累的够呛,自然你的游戏执行效果也不会太理想。现在有了Texture Atlases
,一切都将变得美好。尽管现在是一个纹理图册,但是你仍然可以通过SKTexture
来使用它们。
创建纹理图册
创建方法其实很简单,只需要把一个文件的后缀名改成atlas
即可。
这一小节到此结束,谢谢,再见!
…
…
…
等等,这并非我的意愿,那么我们来谈及下如何用好一个纹理图册。
试想下我们创建了一个纹理图册,可曾考虑过里面的内容过多或是过少,如何平衡是个关键点!假如过少,那么意义不大,Sprite Kit
执行效率还是很低,但是如果一股脑的全部放入,那么多纹理数据全局放入内存中,估计够呛!说到最后,你才是主导者,有效的分类,以及在多个纹理图集之间切换我想是最好的方法。
下集高潮来临,如何将纹理放入到纹理图集并运用,谢谢观看,在再见!