在SpriteKit游戏中拖动拖动

我正在做一个简单的SpriteKit游戏(在Swift中)和基本的物理,其中涉及拖放一些SKSpriteNodes与触摸。 该实现使用touchesBegan,touchesMoved等来更新所触摸的精灵的位置。 一切都按预期工作,但是:

好:游戏总共运行在60fps,CPU使用率在50%左右,CPU在6%

不好:被拖动的精灵有时非常不连贯(看起来像10fps或类似)。 请注意,我的意思是,即使在这个问题中,所有其他的精灵仍然以60fps的速度animation。

这是因为touchesMoved有时比平常每秒钟60次更less被调用。 通常我可以顺利拖放几个精灵,然后开始震荡,永远不会恢复正常。

这是我的触摸处理的简化版本:

override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!) { if let allTouches = touches.allObjects as? UITouch[] { for touch in allTouches { let draggedThing = findDraggedThingForTouch(touch) draggedThing.dragJoint!.bodyB.node.position = touch.locationInNode(self) } } } 

我尝试过使用手势识别器而不是触摸事件,改变精灵的位置,而不是通过弹簧关节来拖动它,并且拖动的东西不是dynamic的。 所有版本都会出现相同的错误,即一段时间后,touchesMoved或手势识别器动作开始像每秒5次而不是60次。

什么可能导致这个?