如何为动画中的单个 SKTextures 设置持续时间

how to set duration for individual SKTextures in animation

我正在尝试为动画中的单个 SKTextures 设置持续时间。 armsAtlas 纹理图集下方。我想将 upTexture 随机设置为持续 1-4 秒,然后将 downTexture 设置为持续 0.3-1 秒。如何为各个纹理设置这些持续时间范围?

let armsAtlas = SKTextureAtlas(named: "arms")
let downTexture = armsAtlas.textureNamed("down")
let upTexture = armsAtlas.textureNamed("up")

有很多方法可以做到这一点。

您可以使用 SKAction 延迟在它们之间随机交换...

func setTexture(texture: SKTexture, delay: NSTimeInterval, range: NSTimeInterval) -> SKAction {
    let textureAction = SKAction.setTexture(texture)
    let delayAction = SKAction.waitForDuration(delay, withRange: range)
    return SKAction.sequence([delayAction, textureAction])
}

没有设置在两者之间切换的动作...

let downAction = setTexture(downTexture, delay: 0.65, range: 0.35)
let upAction = setTexture(upTexture, delay: 2.5, range: 1.5)
let sequenceAction = SKAction.sequence([downAction, upAction])
let repeatAction = SKAction.repeatActionForever(sequenceAction)

yourTexturedSprite.runAction(repeatAction)

你可以使用 SKAction 序列,它是 waitForDuration:withRange: 方法,像这样:

//By default, the sprite is initialized with downTexture
let sprite = SKSpriteNode(texture: downTexture)
sprite.position = CGPoint(x: 200, y: 200)
addChild(sprite)
let sequence = SKAction.sequence([

    SKAction.runBlock({NSLog("Up texture set")}), //Added just for debugging to print a current time
    SKAction.setTexture(upTexture),
    SKAction.waitForDuration(2.5, withRange: 3.0),  //Wait between 1.0 and 4.0 seconds
    SKAction.runBlock({NSLog("Down texture set")}),
    SKAction.setTexture(downTexture),
    SKAction.waitForDuration(0.65, withRange: 0.7),//Wait between 0.3 and 1.0 seconds
    ])

let action = SKAction.repeatActionForever(sequence)

sprite.runAction(action, withKey: "aKey")

这段代码的作用是创建一个精灵,默认使用 downTexture 对其进行初始化,并且:

  • 立即将纹理交换为upTexture
  • 等待 1 到 4 秒
  • 将纹理交换为 downTexture
  • 等待 0.3 到 1 秒
  • 永远重复这一切

如果你想停止这个动作,你可以这样访问:

if sprite.actionForKey("aKey") != nil {
            removeActionForKey("aKey")
}