Неустойчивое перетаскивание в игре SpriteKit

Я работаю над простой игрой SpriteKit (в Swift) с базовой физикой, которая включает в себя перетаскивание некоторых узлов SKSpriteNode касаниями. В реализации используются touchesBegan, touchesMoved и т. Д., А также обновляется позиция затронутого спрайта. Все работает как положено, но:

Хорошо: игра в целом работает с постоянной частотой 60 кадров в секунду, загрузка процессора составляет около 50%, производительность процессора - 6%.

Плохо: перетаскиваемый спрайт иногда очень изменчив (выглядит как 10fps или похожий). Обратите внимание, что под этим я подразумеваю, что все другие спрайты все еще оживляются со скоростью 60 кадров в секунду даже во время этой проблемы.

Это связано с тем, что touchchesMoved иногда начинает вызываться реже, чем обычно 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)
        }
    }
}

Я попытался использовать распознаватели жестов вместо событий касания, изменив положение спрайта вместо того, чтобы перетаскивать его через пружинное соединение, и сделать перетаскиваемый объект не динамическим. Все версии показывают одну и ту же ошибку, то есть через некоторое время touchSMoved или действие распознавателя жестов начинают срабатывать 5 раз в секунду вместо 60.

Что может вызвать это?

Ответы на вопрос(0)

Ваш ответ на вопрос