在 swift 中重复一个函数

Repeating a function in swift

我制作了这个抖动功能来尝试在我的游戏中为我的菜单标题添加抖动效果。以为我觉得这是一个很长的路要走!有什么 shorter/neater 方法可以重复这样的动作吗?

还有可能永远重复这个吗?

func shakeMenu(){

    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute:
        {

    let moveNodeRight = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let moveNodeLeft = SKAction.moveBy(x: -7.0, y: 0.0, duration: 0.05)
    let moveNodeRight1 = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let moveNodeLeft1 = SKAction.moveBy(x: -7.0, y: 0.0, duration: 0.05)
    let moveNodeRight2 = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let moveNodeLeft2 = SKAction.moveBy(x: -7.0, y: 0.0, duration: 0.05)
    let moveNodeRight3 = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let moveNodeLeft3 = SKAction.moveBy(x: -7.0, y: 0.0, duration: 0.05)
    let moveNodeRight4 = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)


    self.shake = SKAction.sequence([moveNodeRight, moveNodeLeft, moveNodeRight1, moveNodeLeft1, moveNodeRight2, moveNodeLeft2, moveNodeLeft3, moveNodeRight3, moveNodeRight4])
    self.menu.run(self.shake)

    })
}





func shakeMenu(){

    let moveRight: SKAction = .moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let sequence: SKAction = .sequence([moveRight, moveRight.reversed()]
    self.menu.run(.repeat(sequence), count: 4)

}

不要将 Grand Central Dispatch 与 SpriteKit 一起使用

这是代码

func shakeMenu() {
    let moveRight = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
    let moveRightLeft = SKAction.sequence([moveRight, moveRight.reversed()])
    let repeatMoveRightLeft = SKAction.repeat(moveRightLeft, count: 4)
    let waitAndMove = SKAction.sequence([.wait(forDuration: 2), repeatMoveRightLeft])
    self.menu.run(waitAndMove)
}

怎么样SKAction.repeatForever (https://developer.apple.com/reference/spritekit/skaction/1417676-repeatforever)

这样你就可以写:

let moveNodeRight = SKAction.moveBy(x: 7.0, y: 0.0, duration: 0.05)
let moveNodeLeft = SKAction.moveBy(x: -7.0, y: 0.0, duration: 0.05)
let moveSequence = SKAction.sequence([moveNodeRight, moveNodeLeft])
let moveForever = SKAction.repeatForever(moveSequence)

self.menu.run(moveForever)

希望对你有所帮助。