我正在尝试实现覆盖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
}
}
}
}
答案 0 :(得分:1)
我设法通过设置节点的坐标来解决这个问题,该节点不应该移动到原来的位置。这似乎有效,因为我还没能在测试中再次复制bug。如果有人能想出更好的解决方案,我很乐意听到它。
答案 1 :(得分:0)
您的问题是您使用的是touch.locationInNode(self)
,其中self
是您的SKSpriteNode
。这意味着您的触摸移动代码只会响应SKSpriteNode
内部的内容。您需要做的是根据您想要应用此逻辑的方式使用精灵的父级或场景。