相信很多人刚接触一个游戏开发框架,都会首先关注动画如何实现。今天就来简单说一下动画是如何实现的。
废话不多说,上代码:
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,如果需要动画反复播放,需要
bird.runAction(SKAction.repeatActionForever(flyAnimation))
如果有其他疑问和错误,欢迎一起交流,互相进步。
欢迎大家来我的博客: blog.segmentfault.com/flappyheart
废话不多说,上代码:
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,如果需要动画反复播放,需要
bird.runAction(SKAction.repeatActionForever(flyAnimation))
如果有其他疑问和错误,欢迎一起交流,互相进步。
欢迎大家来我的博客: blog.segmentfault.com/flappyheart
