2017-02-22 3 views
0

Я создаю игру, в которой у меня есть узел на экране, и когда игрок касается экрана, узел просто работает, НО мне просто нужно, когда игрок нажимает на узел, а затем действие происходит.Как остановить узел, касающийся экрана? SpriteKit

Вот код того, что происходит.

var ballNode = SKSpriteNode(imageNamed: "balls.png") 

var touchLocation = CGPoint() 

override func didMove(to view: SKView) { 

ballNode.size = CGSize(width: 100, height: 100) 
ballNode.position = CGPoint(x: self.size.width*0.5, y: self.size.height*0.9) 

self.addChild(ballNode) 

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

let touch: UITouch = touches.first! 
let positionInScene = touch.location(in: self) 
let touchedNode = self.atPoint(positionInScene) 

touchLocation = touch.location(in: self) 

let moveDown = SKAction.moveTo(y: self.size.height*0.1, duration: 0.3) 
let moveUp = SKAction.moveTo(y: self.size.height*0.9, duration: 0.3) 
let moveSequence = SKAction.sequence([moveDown, moveUp]) 
ballNode.run(moveSequence) 
let pointOfTouch = touch.location(in: self) 
ballNode.contains(pointOfTouch) 

ответ

0

Это может быть сделано таким образом.

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

    if let touch = touches.first as UITouch! { 

     let touchLocation = touch.location(in: self) 
     if ballNode.frame.contains(touchLocation) { 

      let moveDown = SKAction.moveTo(y: self.size.height*0.1, duration: 0.3) 
      //let spin = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 1)) 
      //let spin = SKAction.repeat(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 1), count: 3) 
      let spin = SKAction.rotate(byAngle: CGFloat(M_PI), duration: 1) 
      let moveUp = SKAction.moveTo(y: self.size.height*0.9, duration: 0.3) 
      let moveSequence = SKAction.sequence([moveDown, spin , moveUp]) 
      ballNode.run(moveSequence) 
     } 
    } 
} 

Я добавил строку для вращения, есть две прокомментированные строки для более прядения. просто выберите, который вам подходит

+0

спасибо, он работает как шарм. –

+0

Ваш прием, пожалуйста, выберите это как правильный ответ, и если это поможет вам, пожалуйста, проголосовать за него. Вчера я получил значок (Tenacious) на SO за то, что у меня не менее 20% моих принятых ответов не было голосов :( –

+0

У вас его @RonMyschuk –

Смежные вопросы