仅当手指为Fruit类型(SKSpriteNode的子类)时,才用手指移动SKSpriteNode

时间:2018-11-06 15:28:54

标签: swift skspritenode touchesmoved

我正在创建一个游戏,用户可以在其中移动一些水果。我希望用户只能移动水果,而不能移动场景中的任何其他SKSpriteNode,因此我编写了以下代码来实现它。但是,代码无法正常工作,因为我似乎无法拖动任何精灵,而是仅当我停止触摸屏幕并且它们不会移动太多时,它们才会改变位置。

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    if let location = touch?.location(in: self){
        let nodesTouched  = nodes(at: location)
        for node in (nodesTouched) {
            if node is Fruit{
            for t in touches {
                let locationMoved = t.location(in: self)
                node.position.x = locationMoved.x
                node.position.y = locationMoved.y
                }

            }
        }
    }


}

有人知道这是怎么回事吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,基本上是每次触摸该特定Fruit实例时,将PhysicsBody.affectedByGravity属性设置为false,然后在我停止触摸它时将其重新设置为true。这样就可以将所有水果拖到我想要的任何地方。