используя UIPanGesture с SpriteKit - PullRequest
       15

используя UIPanGesture с SpriteKit

0 голосов
/ 19 сентября 2018

Я пытаюсь панорамировать SKSpriteNode с помощью UIPanGesture, проблема в том, что движение слишком быстрое (расстояние намного больше, чем движение пальца, ниже приведен код. Я подозреваю, что что-то не так с моим добавлением текущей позициии перевод. Ваша помощь очень ценится.

@objc func panGestureHandler(_ recognizer: UIPanGestureRecognizer) {

    if recognizer.state == .began {
        print("Touchdown")
        var touchLocation = recognizer.location(in: recognizer.view)
        touchLocation = self.convertPoint(fromView: touchLocation)

        if (self.atPoint(touchLocation) is SKSpriteNode){
            selectedNode = self.atPoint(touchLocation) as! SKSpriteNode
        } else {
            recognizer.state = .failed 
        }


    } else if recognizer.state == .changed {

        var translation = recognizer.translation(in: recognizer.view!)
        translation = CGPoint(x: translation.x, y: -translation.y)
        let position = selectedNode.position
        selectedNode.position = CGPoint(x: position.x + translation.x, y: position.y + translation.y)
        recognizer.setTranslation(CGPoint.zero, in: recognizer.view)

    } else if recognizer.state == .ended {
        recognizer.setTranslation(CGPoint.zero, in: recognizer.view)
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

Вот окончательный код:

 @objc func panGestureHandler(_ recognizer: UIPanGestureRecognizer) {
    var touchLocation = recognizer.location(in: recognizer.view)
    touchLocation = self.convertPoint(fromView: touchLocation)
    if recognizer.state == .began {
        print("Touchdown")

        if (self.atPoint(touchLocation) is SKSpriteNode){
            selectedNode = self.atPoint(touchLocation) as! SKSpriteNode
        } else {
            recognizer.state = .failed 
        }


    } else if recognizer.state == .changed {

        var translation = recognizer.translation(in: recognizer.view!)
        //translation = self.convertPoint(fromView: translation)

        translation = CGPoint(x: translation.x, y: -translation.y)


        selectedNode.position = CGPoint(x: pos.x + translation.x, y: pos.y + translation.y)
        recognizer.setTranslation(CGPoint.zero, in: recognizer.view)
         pos = touchLocation

    } else if recognizer.state == .ended {
        recognizer.setTranslation(CGPoint.zero, in: recognizer.view)
    }
}

Knight0fDragon, вам нужно было подключиться к переводу даже во время измененного состояния.0x141E спасибо за объяснение перевода.

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