iOS开发 使用SpriteKit实现简单的帧动画

一、什么是帧动画?

简单来说,帧动画就是当我们拥有一系列图像帧时,以一定的时间间隔将图像帧显示出来,从而达到动画效果。一般来说,动画的帧率都在24-60帧,也就是每秒24到六十个图像帧。

二、怎么用SpriteKit实现帧动画

1、准备好一个纹理图集的文件夹,并把它添加到工程文件。

2、创建一个精灵(spriteNode),这一步很简单。

3、创建一个SKTexture数组,用来储存所有的图像帧。

4、buildAnimatio方法,用来构建动画:

(1)创建一个SKTextureAtlas对象用来加载纹理图集和一个numImages对象用来存储纹理名称数量。

(2)写一个从1到numImages的for循环,遍历所有的帧,给每一个索引都构造一个名称,我这里命名为“frame”(注意这里的命名要和纹理图集里的每张图片的名字相同,否则就不能正常的加载纹理。

(3)从TextureAtlas中获取纹理并且将它添加到刚才创建的数组中,纹理不存在就添加一个空的SKTexture对象。

(4)将数组中的第一帧图像设置为精灵的初始纹理,设置好精灵的位置并把它添加到场景中。

5、animateSprite方法,用来播放动画:

(1)创建一个SKAction对象用来播放数组中的纹理,设置每帧的显示时间为0.1秒。

(2)创建一个无限重复的SKAction对象repeatAction,用来重复播放动画。

(3)将repeatAction应用到精灵上

完整代码如下:

import SpriteKit

class GameScene: SKScene {
    private var spriteNode: SKSpriteNode!
    private var walkingFrames: [SKTexture] = []
    
    override func didMove(to view: SKView) {
        buildAnimation()
        animateSprite()
    }
    
    func buildAnimation() {
        let textureAtlas = SKTextureAtlas(named: "waiting")
        let numImages = textureAtlas.textureNames.count
        print(numImages)
        for i in 1...numImages {
            let textureName = "frame\(i)"
            walkingFrames.append(textureAtlas.textureNamed(textureName) ?? SKTexture())
        }
        spriteNode = SKSpriteNode(texture: walkingFrames[0])
        spriteNode.position = CGPoint(x: frame.midX, y: frame.midY)
        addChild(spriteNode)
    }
    
    func animateSprite() {
        let animateAction = SKAction.animate(with: walkingFrames, timePerFrame: 0.1)
        let repeatAction = SKAction.repeatForever(animateAction)
        spriteNode.run(repeatAction)
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值