spritekit如何在两个不同的节点上转换两个SKAction

时间:2016-12-06 09:46:02

标签: sprite-kit swift3 skspritenode skaction sknode

我有两个节点node1和node2。 node1位于位置0.当我点击屏幕时,它会执行动作,直到它在屏幕中间,或者用户将手指从屏幕上移开。一旦node1到达屏幕中间,它将停止,node2将运行其动作。到目前为止,我的代码都是这样做的。

但是,为了让node2运行其动作,用户必须将手指从屏幕上移开并再次触摸它。我不希望这种情况发生。我希望node2的操作在node1完成后运行,而用户不会从屏幕移开他们的手指。

基本上,用户按住屏幕node1运行其操作完成,然后node2运行其操作。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let Node1Move=SKAction.moveBy(x:50,y:0,duration:0.6)
    let node1rep=SKAction.repeatForever(Node1Move)
    node1.run(node1rep)

    if modeNode2==1{
        let node2move=SKAction.moveBy(x:-10,y:0,duration:0.9)
        let node2Rep=SKAction.repeatForever(node2move)
        node2.run(node2Rep)
    }

}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    node1.removeAllActions()
    node2.removeAllActions()
}

override func update(_ currentTime: TimeInterval) {
    if node1.position.x+node1.frame.width > self.frame.width/2{
        node1.removeAllActions()

        moveNode2=1
    }

}

1 个答案:

答案 0 :(得分:2)

touchesBegin只会触发一次,所以你的moveNode2 == 1将不会做任何事情。而不是使用moveBy,用户moveTo,并让node1移动到屏幕的中心 - node1宽度。然后只需将完成块添加到node1.run。

注意:您可能需要更改持续时间,而不确定这些数字的来源。如果您计划让用户不断点击屏幕,那么只需执行cmd

即可
totalDuration = 3 * (node1.x - 'node1 start x')/((self.frame.width/2 - node1.frame.width) - 'node1 start x')