当前位置: > > > Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)

Swift - 使用atlas图集实现动画效果(SpriteKit游戏开发)

我们通常继承SKSpriteNode来实现游戏中的元素,除了可以使用图片作为纹理皮肤外。我们还可以使用动画纹理集来实现动画播放。
动画纹理集的制作也很简单,首先要有一套动画序列图,然后把它们放到一个文件夹下,最后把文件夹改名为*.atlas后缀就行了。


下面通过一个“神经猫”动画元件来演示:


--- 神经猫类 Cat.swift ---
import SpriteKit

class Cat:SKSpriteNode{
    
    //神经猫的纹理集
    let dbAtlas = SKTextureAtlas(named: "db.atlas")
    //神经猫的纹理数组
    var dbFrames = [SKTexture]()
    
    override init() {
        //获取纹理集的第一个纹理
        let texture = dbAtlas.textureNamed("db_01")
        //获取纹理的尺寸
        let size = texture.size()
        //执行父类的构造方法
        super.init(texture:texture,color:SKColor.whiteColor(),size:size)
        var i:Int
        var tempName:String
        //从纹理集中获取纹理加入数组
        for i=1 ; i <= dbAtlas.textureNames.count ; i++ {
            //%.2d表示两位整数。下面格式化完毕后便是db_01,db_02,db_03等
            tempName = String(format:"db_%.2d",i)
            let dbTexture = dbAtlas.textureNamed(tempName)
            dbFrames.append( dbTexture )
        }
        //设置中心点
        self.anchorPoint = CGPointMake(0.5, 0.2)
        //播放动画
        db()
    }
    
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func db(){
        //循环播放纹理动画
        self.runAction(SKAction.repeatActionForever(
            SKAction.animateWithTextures(dbFrames, timePerFrame: 0.2)))
    }
}

--- 元件使用 GameScene.swift ---
import SpriteKit

class GameScene: SKScene {
    
    //利用lazy关键字可以让实例化在第一次使用时才执行
    lazy var cat = Cat()
    
    //当切换到这个场景视图后
    override func didMoveToView(view: SKView) {       
        cat.position = CGPoint(x:CGRectGetMidX(self.frame)-10, y:CGRectGetMidY(self.frame)-150);
        cat.zPosition = 20
        self.addChild(cat)        
    }
    //响应屏幕点击的方法
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        
    }
}
评论0