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
)指向当前纹理(即当前赋予的)!觉得单调?换掉它!这样精灵的纹理属性就指向了我们喜欢的纹理了。下一次场景进行渲染时,就会改成新的纹理。不过,任何时候替换成新的纹理,我们可能还需要对其他属性进行设置,例如:size
、anchorPoint
和centerRect
。通常我们最好保证设计好的一套纹理图册中的图片大小都是一致的,我可不想游戏中人物形象忽大忽小搞的像变身似的~
下面来让我们的怪物动起来!这一下子让人联想到Action
,要知道我们的纹理图册其实就是一些连续的图片。我们创建这么一个动作,可以让其有序的切换图片,不就是在播放动作了吗?
你可以这么玩,当然假如你的朋友和你够铁的话….
和他视频,然后狂按截屏,来个百来张,打开个存储的文件夹,然后一张张切换看,不就是一个动画吗(除非他不动~)?这个和我们异曲同工。接下来是代码。
//这样创建一个动作 每隔0.1秒换一张纹理 当然我们传入的是一个纹理数组,内部怎么做不关心let walkAnimation = SKAction.animateWithTextures(monsterWalkTextures, timePerFrame: 0.1)//让精灵动起来monster.runAction(walkAnimation)
办完正事纹理走开!
要知道图形硬件将纹理加载到内存之后,是始终保存着的,直到SKTexture
对象被删除。所以在删除的时候我们必须考虑很多,因为那些对它具有强引用的对象都要受此(删除)影响!具体包括:
- 引用了该纹理的所有 SKSpriteNode和SKEffectNode 对象
- 代码中对该纹理具有强引用(
strong references
)关系的所有东东 - SKTextureAtals对象自然也不用说 ,还不是包含了这个纹理的原因哈
结尾:
本节对纹理进一步了解,我认为要对概念理解透彻,至于应用非常简单,所以不用担心。
接下来是对Action的展开讨论!
- 14.精灵进阶之干活篇下
- 13.精灵进阶之干活篇
- 12.精灵进阶之理论篇
- AndEngine进阶之自定义Tiled精灵
- 16.精灵进阶之节点命名
- AndEngine进阶之创建高性能的文本精灵
- cocos2dx进阶学习之CCNode(点在精灵上)
- 15.精灵进阶之给节点添加动作
- 干活
- 干活
- 周末“干活”之 Mesos Meetup
- 干活干活干活
- ReactiveCocoa之进阶篇
- ReactiveCocoa之进阶篇
- ReactiveCocoa之进阶篇
- 《Java 进阶之路》 下--推荐书籍
- cocos2d-x之精灵
- Cocos2dx之精灵创建
- Maven中的dependency的scope作用域详解
- 00-自测2. 素数对猜想 (20)
- latex 消除项目符号enumerate前面的多余空白
- 黑马程序员------JAVA中的继承机制
- leetcode-198 House Robber
- 14.精灵进阶之干活篇下
- sgu 149
- 黑马程序员_输入和输出
- 第一章C++编程基础(指针带来的弹性)
- 共享内存+信号量 实例
- ping得通外网IP,ping不通外网域名的解决办法
- 剑指offer--连续子数组的最大和
- oracle的基本查询和复杂查询
- 安装htttpd服务器