UIPanGesture в SpriteKit - PullRequest
       19

UIPanGesture в SpriteKit

0 голосов
/ 04 декабря 2018

Я пытаюсь сделать шар, SKSpriteNode, двигаться во ВСЕХ направлениях, включая диагонали и все остальные направления.UIGesture не работает с ним, поэтому мне нужно использовать UIPanGesture, но я понятия не имею, как внедрить его в файл SpriteKit.Это то, что я до сих пор.Любая помощь??Узел шарикового спрайта называется «шар».

func handlePan(recognizer:UIPanGestureRecognizer) {
  let translation = recognizer.translation(in: self.view)
  if let view = recognizer.view {
    view.center = CGPoint(x:view.center.x + translation.x,
                            y:view.center.y + translation.y)
  }
  recognizer.setTranslation(CGPoint.zero, in: self.view)
}

1 Ответ

0 голосов
/ 05 декабря 2018

Обратите внимание, что SpriteKit и UIKit имеют совершенно разные системы координат (Spritekit является декартовой, UIKit отражается вокруг оси X), поэтому вы не можете использовать координаты UIKit в Spritekit без преобразования.К счастью, у SKScene и SKNode есть методы для преобразования точек из SKView и из других узлов SKNode в локальное пространство узлов.

@objc private func pan(_ recognizer: UIPanGestureRecognizer) {
    let pointInView = recognizer.location(in: view)
    let pointInScene = convertPoint(fromView: pointInView)

    switch recognizer.state {
    case .began:
        //Start dragging on the ball, or ignore this gesture
        isPanning = atPoint(pointInScene) == ball
    case .changed:
        //Move the ball
        guard isPanning else {
            return
        }
        let translation = recognizer.translation(in: view)
        ball.position.x -= translation.x
        ball.position.y += translation.y
        recognizer.setTranslation(.zero, in: view)
    case .cancelled, .ended:
        //Stop dragging
        isPanning == false
    default:
        break
}

У меня есть полный пример на моем GitHub здесь: https://github.com/joshuajhomann/AngryBirdsClone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...