Положение спрайт-узла не обновляется при прикосновении? - PullRequest
0 голосов
/ 07 июня 2019

По сути, я хочу, чтобы при касании узла я хотел перемещать его по экрану.Проблема в том, что всякий раз, когда я двигаю пальцем слишком быстро, узел просто перестает следовать за ним.

В частности, у spriteNodes, которые я пытаюсь сделать, есть физические тела и анимированные текстуры, поэтому я пытался сделатьтот же код с совершенно простым spriteNode, и я столкнулся с той же проблемой.

Код, который у меня есть, довольно прост, поэтому я не уверен, является ли это проблемой с тем, что я написал, или это просто проблема задержки, которую я не могу исправить.Это также в основном одно и то же во всех касаниях: начало, касание, движение и касание, закругленные

for touch in touches {

  let pos = touch.location(in: self)
  let node = self.atPoint(pos)

  if node.name == "activeRedBomb"{
    node.position = pos
  }

  if node.name == "activeBlackBomb"{
    node.position = pos
  }


  if node.name == "test"{
    node.position.x = pos.x
    node.position.y = pos.y
  }


}

1 Ответ

0 голосов
/ 07 июня 2019

Происходит следующее: если вы слишком быстро перемещаете палец, то в какой-то момент местоположение касания больше не будет находиться на спрайте, поэтому код для перемещения узла не будет срабатывать.

Чтовам нужно установить флаг в touchesBegan(), чтобы указать, что этот спрайт затронут, переместить спрайт в место касания в touchesMoved(), если флаг установлен, а затем сбросить флаг в touchesEnded().

Вот примерно то, что вам нужно добавить для этого:

import SpriteKit

class GameScene: SKScene {

var bombIsTouched = false

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        if activeRedBomb.contains(touch.location(in: self)) {
            bombIsTouched = true
        }
    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    if bombIsTouched {
        activeRedBomb.position = (touches.first?.location(in: self))!
    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    if bombIsTouched {
        bombIsTouched = false
    }
}    
...