2016-12-06 7 views
2

У меня есть два узла node1 и node2. node1 находится в позиции 0. Когда я нажимаю на экран, он запускает свое действие до тех пор, пока оно не окажется посередине экрана, или пользователь не удалит свой палец с экрана. Как только узел1 достигнет середины экрана, он остановится, а node2 запустит свое действие. Мой код делает это до сих пор.spritekit Как переместить два SKAction на двух разных узлах

Однако, чтобы узел2 выполнял свое действие, пользователь должен удалить свой палец с экрана и снова коснуться его. Я не хочу, чтобы это произошло. Я хочу, чтобы действие для node2 выполнялось после завершения node1 без удаления пользователем пальца с экрана.

В основном пользователь удерживает экранный узел1, запускает его действие, а затем узел2 запускает свое действие.

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

touchsBegin будет срабатывать только один раз, поэтому ваш 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() 
} 
+0

Спасибо, это сработало! –

+0

Вы очень приветствуетесь – Knight0fDragon