简单的Gif就像Spritekit的动画一样

时间:2015-10-26 04:54:17

标签: ios swift sprite-kit

我无法真正找到一个简单的解决方案,我看到的每个例子都只显示非常复杂的解决方案,但我想要的只是2-3个循环的图像,所以它看起来好像是动画的。与GIF动画效果相同。现在我有了这个来创建一个图像

MonsterNode = SKSpriteNode(imageNamed: "MonsterNode_GameScene")

但我如何将MonsterNode变量设置为此类动画?我真的在寻找实现这一目标所需的最少量代码。

2 个答案:

答案 0 :(得分:4)

主要思想是使用animateWithTextures执行此任务。您需要设置精灵需要动画的所有帧以及每帧的显示时间。然后使用repeatActionForever运行动画循环。

// Add 3 frames
let f0 = SKTexture.init(imageNamed: "MonsterNode_GameScene_0")
let f1 = SKTexture.init(imageNamed: "MonsterNode_GameScene_1")
let f2 = SKTexture.init(imageNamed: "MonsterNode_GameScene_2")
let frames: [SKTexture] = [f0, f1, f2]

// Load the first frame as initialization
monsterNode = SKSpriteNode(imageNamed: "MonsterNode_GameScene_0")
monsterNode.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))

// Change the frame per 0.2 sec
let animation = SKAction.animateWithTextures(frames, timePerFrame: 0.2)
monsterNode.runAction(SKAction.repeatActionForever(animation))

self.addChild(monsterNode)

答案 1 :(得分:0)

我得到了同样的大红X问题。 因此,而不是在代码中定义monsterNode。我通过拖动atlas文件夹中的第一个动画图像在sks屏幕上创建了monstor。然后为它指定一个名称:来自属性部分的monsterNode。这是代码

var runAnimation = [SKTexture]()

override func didMove(to view: SKView) {
    let runAtlas = SKTextureAtlas(named: "run")
    for index in 1...runAtlas.textureNames.count{
        let textureName = String.init(format: "run%1d", index)
        runAnimation.append(SKTexture(imageNamed: textureName))
    }
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let monsterNode = self.childNode(withName: "monsterNode")
    if(monsterNode != nil){
        let animation = SKAction.animate(with: runAnimation, timePerFrame: 0.1)
        monsterNode?.run(SKAction.repeatForever(animation))
     }       
}