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

Posted

技术标签:

【中文标题】spritekit 如何在两个不同的节点上转换两个 SKAction【英文标题】:spritekit how to transition two SKAction on two different nodes 【发布时间】:2016-12-06 09:46:02 【问题描述】:

我有两个节点 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
    


【问题讨论】:

我厌倦了将 node2 操作更新但没有用。 有一个序列动作,允许您在一个链中包含多个动作以一个接一个地运行。不确定这是否会有所帮助,所以不会将其作为答案,但请检查一下。 【参考方案1】:

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

注意:您可能需要更改持续时间,但不确定这些数字来自何处。如果您打算让用户不断地点击屏幕,那么只需执行totalDuration = 3 * (node1.x - 'node1 start x')/((self.frame.width/2 - node1.frame.width) - 'node1 start x')

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

    let Node1Move=SKAction.moveTo(x:self.frame.width/2 - node1.frame.width,y:0,duration:3.0)
    node1.run(Node1Move)
    
        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()

【讨论】:

以上是关于spritekit 如何在两个不同的节点上转换两个 SKAction的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 SpriteKit 如何对两个或多个精灵节点子节点的动画进行分组?

如何在 SpriteKit 中跟踪接触后的节点移动

模拟两个 Sprite Kit 节点的万有引力

SpriteKit - 如何检测使用触摸影响哪个节点?

iOS SpriteKit:以正确的方向移动节点

如何使用两个不同的节点版本运行两个不同的nodejs应用程序[关闭]