touchesMoved运行不正常

时间:2016-01-23 03:52:35

标签: swift

我正在尝试实现覆盖touchesMoved func以使用户可以移动SKSpriteNodes。但是,当我拖动时,我必须非常缓慢地移动节点以使其跟随我的触摸。此外,后台有三个SKSpriteNodes(您将看到我明确设置为.userInteractionEnabled = false),这些节点偶尔会响应触摸。任何帮助将不胜感激。如果您需要代码的其他任何部分,请告诉我。

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        var positionInScene = CGPoint(x: 375.0, y: 400.0) //sets a default position

        titleLabel.userInteractionEnabled = false
        drawingBoard.userInteractionEnabled = false
        sideBar.userInteractionEnabled = false

        for touch in touches {
            positionInScene = touch.locationInNode(self)

            if self.nodeAtPoint(positionInScene) is SKSpriteNode {
                if (self.nodeAtPoint(positionInScene)).name == movableNodeName { //movableNodeName is the name assigned to all SKSpriteNodes that should be draggable
//I know this might be a strange way of doing it
                    (self.nodeAtPoint(touch.previousLocationInNode(self))).position = positionInScene
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

我设法通过设置节点的坐标来解决这个问题,该节点不应该移动到原来的位置。这似乎有效,因为我还没能在测试中再次复制bug。如果有人能想出更好的解决方案,我很乐意听到它。

答案 1 :(得分:0)

您的问题是您使用的是touch.locationInNode(self),其中self是您的SKSpriteNode。这意味着您的触摸移动代码只会响应SKSpriteNode内部的内容。您需要做的是根据您想要应用此逻辑的方式使用精灵的父级或场景。