Sprite-Kit:移动SKSpriteNode

时间:2017-12-21 15:18:04

标签: ios swift sprite-kit

我知道移动一个物体并不困难,但我的不同之处在于,我尝试了各种方式,但没有一个工作过。

我想要实现的目标?

  • 如果用户点击屏幕的左侧,球将向左移动
  • 如果用户点击屏幕右侧,则球会向右移动

所以我直接去了touchesBegan并写了以下内容:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        ball?.removeAllActions()
       for touch in touches {

         let moveBY = SKAction.moveTo(x: touch.location(in: view).x, duration: 1.0)
        self.ball?.run(moveBY)
    } 
}

我尝试了四种不同的方法,我无法克服它,也供你参考,这是我的球的照片 信息:

info

1 个答案:

答案 0 :(得分:3)

为了按照您想要的方向移动节点,您首先必须知道三件事

  1. 您要移动的节点的anchorPoint
  2. 要移动的节点的父节点的anchorPoint
  3. 您想要移动的position节点
  4. 节点的anchorPoint属性以标准化的方式将其值从(0,0)存储到(1,1)。 SPSpriteNode

    的默认值为(0.5,0.5)

    节点的position属性将其位置(x,y)坐标存储在ortogonal坐标系中,其中点(0,0)位于PARENT的锚点所在的位置

    所以你的场景anchorPoint是(0.5,0.5),这意味着如果你在坐标(0,0)处放置一个直接的孩子,孩子将被定位为{{1} }位于(0,0),它始终与其父anchorPoint匹配。

    当你使用那些重载touchesBegan,touchesMoved等...在anchorPointSKScene内作为一般,如果你想获得在坐标系中表示的触摸位置场景的直接孩子(sknode)位于,你应该做类似

    的事情
    SKNodes

    希望它有用,你可能遇到的其他问题是你的球不是场景的直接孩子,你的坐标错了