在SpriteKit游戏中乱糟糟的拖拽

Gio*_*lla 6 cocoa-touch ios sprite-kit swift

我正在开发一个简单的SpriteKit游戏(在Swift中),它具有基本物理功能,包括拖放一些带有触摸的SKSpriteNodes.该实现使用touchesBegan,touchesMoved等,并更新被触摸的精灵的位置.一切都按预期工作,但是:

好:游戏总是以60fps的速度运行,cpu使用率约为50%,gpu为6%

坏:拖动的精灵有时非常不稳定(看起来像10fps或类似).请注意,这意味着即使在此问题期间,所有其他精灵仍然以60fps的速度生效.

这是因为touchesMoved有时会比平常每秒60次更频繁地被调用.通常我可以平滑地拖放一些精灵,然后它开始变得不稳定并且永远不会恢复正常.

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

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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

什么可能导致这个?