2016-12-06 54 views
2

我有兩個節點node1和node2。節點1位於位置0.當我點擊屏幕時,它將執行其操作,直到屏幕中間或用戶將其手指從屏幕上移開。一旦node1到達屏幕中間,它將停止,並且node2將運行它的操作。我的代碼到目前爲止。spritekit如何在兩個不同的節點上轉換兩個SKAction

但是,爲了使節點2運行其操作,用戶必須從屏幕上移開他們的手指並再次觸摸它。我不希望發生這種情況。我想讓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 
    } 

} 
+0

我累了把node2的行動更新,但沒有奏效。 –

+2

有一個序列動作,允許您在鏈中包含多個動作以逐個執行。不知道這是否會有所幫助,所以不會把它作爲答案,但檢查出來。 –

回答

2

touchesBegin只會觸發一次,所以您的moveNode2 == 1將不會執行任何操作。而不是使用moveBy,用戶moveTo,並讓node1移動到屏幕的中心 - 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() 
} 
+0

感謝它的工作! –

+0

非常歡迎 – Knight0fDragon

相關問題