我一直在从背部手术中学习Swift,非常感谢任何帮助。
问题描述: 我有一个函数,在命中时向后推一个精灵。当我使用
self.runAction(jumpBackSequence)
我得到了理想的行为。 (精灵被推回了很长的距离。)
现在当我更新它以使用“withKey”时(因为我需要能够在下一次接触时再次停止前进动作,所以前进动作会大大减弱。
self.runAction(jumpBackSequence, withKey: "moveStraightLine")
我创建此操作的功能如下:
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")
}
答案 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