带键的SKAction改变了Sprite行为

时间:2016-06-16 00:27:05

标签: swift sprite-kit skaction

我一直在从背部手术中学习Swift,非常感谢任何帮助。

问题描述: 我有一个函数,在命中时向后推一个精灵。当我使用

self.runAction(jumpBackSequence)

我得到了理想的行为。 (精灵被推回了很长的距离。)

enter image description here

现在当我更新它以使用“withKey”时(因为我需要能够在下一次接触时再次停止前进动作,所以前进动作会大大减弱。

self.runAction(jumpBackSequence, withKey: "moveStraightLine")

enter image description here

我创建此操作的功能如下:

 func pushBack(){
            self.removeActionForKey("moveStraightLine")

            let height:CGFloat = 5
            let jumpDistanceA:CGFloat = 20
            let jumpDistanceB:CGFloat = 20
            let duration:NSTimeInterval = 0.15

            let jumpUp = SKAction.moveByX(0, y:height, duration:duration)
            let moveBack = SKAction.moveByX(jumpDistanceA, y: 0, duration: duration)
            let jStep1 = SKAction.group([jumpUp, moveBack])

            let jumpDown = SKAction.moveByX(0, y:(height * -1), duration:duration)
            let moveBack2 = SKAction.moveByX(jumpDistanceB, y: 0, duration: duration)
            let jStep2 = SKAction.group([jumpDown, moveBack2])

            let moveZombie1 = SKAction.moveToX(0, duration: spawnSpeed1()   )
            let removeZombie1 = SKAction.removeFromParent()
            let moveAndRemoveZombie1 = SKAction.sequence([moveZombie1, removeZombie1])

            let jumpBackSequence = SKAction.sequence([jStep1, jStep2, moveAndRemoveZombie1])

            self.runAction(jumpBackSequence)

  //          self.runAction(jumpBackSequence, withKey: "moveStraightLine")
}

2 个答案:

答案 0 :(得分:1)

你正在使用moveTo,而不是moveBy,所以当你重新添加动作来移动僵尸时,你现在说从较近的位置开始,需要X秒移动到最后,不需要X秒 - 时间已经走过了。由于您看到的效果,您不希望这样。使用moveBy,僵尸速度将保持一致

答案 1 :(得分:0)

我不确定为什么会发生这种情况,但我意识到runAction withKey实际上是将代码移动了指定的距离,而没有密钥的示例则没有。当我更新代码以使用一小部分屏幕宽度时,无论是否使用密钥,它的行为都相同 - 这让我觉得这可能是Swift中的一个小错误。

要解决此问题,我将距离更新为

let jumpDistanceA:CGFloat = (self.scene?.size.width)! * 0.15
let jumpDistanceB:CGFloat = (self.scene?.size.width)! * 0.15

我希望这有助于其他人。 最好的祝福, MPE