在Swift中限制节点沿路径的移动

时间:2018-05-04 10:06:50

标签: swift path sprite-kit skaction

在SpriteKit上,有一个SKAction跟随使用for node跟随您使用CGMutablePath创建的路径。像这样:

path = CGMutablePath()
path?.move(to: point1)
path?.addLine(to: point2)

let follow = SKAction.follow(path!, asOffset: false, orientToPath: true, speed: speedPath!)

但我想让播放器沿着路径移动节点,而不是沿着路径移动节点。就像使用bezier路径的直线或椭圆的路径一样,玩家可以沿着路径移动节点。这是图像:

enter image description here

对此有何想法?

2 个答案:

答案 0 :(得分:0)

你可以这样做(对不起 - 现在只有伪代码):

touchesBegan {
   if touch on the node, set flag.
}

touchesMoved {
   if flag not set, return
   if touch is on path {
      Use SKACtion 'follow path' to move node to touch location
   } else {
      stop the node's movement /* Touch has moved away from path */
      clear flag
   }

touchesEnded {
   clear flag
   stop node if moving
}

答案 1 :(得分:0)

寻找了一段时间之后,我终于得到了想要的东西。 基本上,您需要获取路径上的每个点,无论是直线还是贝塞尔曲线。 然后,您可以沿着最近的点移动节点。

以下是来源: Find Nearest point