在SpriteKit游戏中乱糟糟的拖拽

时间:2014-06-14 19:35:55

标签: ios cocoa-touch 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)
        }
    }
}

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

是什么导致这种情况?

0 个答案:

没有答案