[原创]SpriteKit+Swift学习笔记(二)-简单动画

336 查看

相信很多人刚接触一个游戏开发框架,都会首先关注动画如何实现。今天就来简单说一下动画是如何实现的。
废话不多说,上代码:

var textureAtlas = SKTextureAtlas(named: "bird")
var textures = NSMutableArray()
for var i = 1; i <= textureAtlas.textureNames.count; i++ {
  textures.addObject(textureAtlas.textureNamed("bird-0\(i).png"))
}
var flyAnimation = SKAction.animateWithTextures(textures, timePerFrame: 0.5)

这里我们先考虑一个鸟飞行的动画:首先,把你的动画文件(几个动作连续的png)放置在一个文件夹中,命名为bird。然后创建一个纹理集,如上面代码第一行,读取文件夹bird。其次创建一个纹理数组,然后用for循环,将各个png纹理添加进去。最后只要用skaction就可以播放了,是不是很简单。
这里开发时可能会遇到几个问题:
1.TextureAtlas到底是什么类型,不能直接用作数组吗?
不是,它的作用只是获取一组纹理,返回的是纹理集对象。而且如果你想知道里面有多少个纹理,只能通过它里面有多少纹理的名字来判断。
(@property(nonatomic, readonly) NSArray *textureNames)
纹理集的名字集合,是一个数组类型的值。
2.为什么取出纹理中的纹理名字要用上面代码中所示格式呢?为什么不是bird_1和bird_2这样的形式?
坦白讲,我也不是很清楚具体的命名规则,但是你可以打印纹理集内部的内容,结果如下:

SKTextureAtlas 'bird' 4 textures:
 (
    "SKTexture'bird-01.png' (34 x 24)",
    "SKTexture'bird-02.png' (13 x 24)",
    "SKTexture'bird-04.png' (34 x 24)",
    "SKTexture'bird-03.png' (13 x 24)"
)

所以如果你想获取到里面的纹理名字,只能用上面的那种形式,如果你获取纹理失败,可以打印出来,看看你的纹理被命名成了什么。如果有人知道为什么这样命名,非常欢迎指出。
3.为什么我的动画只能播放一遍?
如果是刚开始学习的话,可能是你没有调用repeat,如果需要动画反复播放,需要

如果有其他疑问和错误,欢迎一起交流,互相进步。