Неустойчивое перетаскивание в игре 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.
Что может вызвать это?