如何在Swift SpriteKit中使精灵永远上下移动

6
我正在尝试让一个精灵永远上下移动,我尝试使用一个"if语句"来检查位置是否...,然后它会再次向上移动。但是它不起作用。我真的很需要帮助,谢谢!以下是代码。
var Ground = SKSpriteNode()
var Ground2 = SKSpriteNode()

override func didMoveToView(view: SKView) {
    Move()
}

func Move(){
    let action = SKAction.moveToY(self.frame.height / 2 - 360, duration: 5.0)
    Ground.runAction(SKAction.repeatActionForever(action))

    let action2 = SKAction.moveToY(self.frame.height / 2 + 140, duration: 5.0)
    Ground2.runAction(SKAction.repeatActionForever(action2))
}
2个回答

9
您可以使用动作序列来实现此功能:
override func didMoveToView(view: SKView) {

    let sprite = SKSpriteNode(color: SKColor.purpleColor(), size: CGSize(width: 100, height: 10))

    sprite.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))

    addChild(sprite)

    let moveUp = SKAction.moveByX(0, y: 200, duration: 2)

    let sequence = SKAction.sequence([moveUp, moveUp.reversedAction()])

    sprite.runAction(SKAction.repeatActionForever(sequence), withKey:  "moving")
}

非常感谢,我有一个问题。"moving"关键字是什么意思?谢谢。 - David Sundström
@DavidSundström 这是一个(唯一的)键,允许您稍后在代码中访问该特定操作(并更改它、停止它、删除它等)。 - Whirlwind
好的,我明白了,谢谢 :) - David Sundström
关键字在游戏结束或其他需要停止操作的情况下非常有用。您可以像这样在代码中的任何位置访问它:removeActionForKey("moving")。 - Hedylove
使用关键字的真正好处在于您在同一节点上运行多个操作,但想要访问特定操作时。 - Whirlwind

1
“Whirlwind的答案已更新为Swift 5。”
        let sprite = SKSpriteNode(color: SKColor.purple, size: CGSize(width: 100, height: 10))

        sprite.position = CGPoint(x: frame.midX, y: frame.midY)

        addChild(sprite)

        let moveUp = SKAction.moveBy(x: 0, y: 200, duration: 2)

        let sequence = SKAction.sequence([moveUp, moveUp.reversed()])

        sprite.run(SKAction.repeatForever(sequence), withKey:  "moving")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接