Spritekit física y suavizado de camera

He estado luchando con este problema por un time, que parece estar enterrado en el interior del motor de la física spritekit.

Mi primera pregunta sería: ¿Spritekit procesa sus actualizaciones físicas en un hilo diferente al hilo principal?

Tengo un nodo "mundial" en la escena en el que me muevo para simular una vista de "camera". Como tal, puedo centrar la "camera" en mi nodo de personaje de jugador. Dado que el jugador salta mucho hacia arriba y hacia abajo, quiero suavizar la camera. Sin suavizado de la camera, no hay problemas. Pero cuando agrego suavizado de camera, como tal: (este código se llama desde didFinishUpdate )

 CGPoint ptPosition = self.position; float fSmoothY = m_fLastCameraY + (ptPosition.y - m_fLastCameraY) * 0.1; CGPoint pointCamera = [self.scene convertPoint:CGPointMake(ptPosition.x, fSmoothY) fromNode:self.parent]; [gameScene centerOnPoint:pointCamera]; m_fLastCameraY = fSmoothY; 

Si llamo al código anterior de didSimulatePhysics , hace exactamente lo mismo. Tartamudea cada vez que se cae (debido al alisado de la camera Y).

Al trazar, puedes ver que el jugador Y (la línea roja) tartamudea en el transcurso de los cuadros.

¿Cómo puedo solucionar esto o evitarlo si no se puede "arreglar" realmente?

Sugiero que aplique un filter de respuesta de impulso infinito (IIR) para suavizar la camera. Puedes hacer eso por …

Primero, declara las variables de instancia

 CGFloat alpha; CGFloat fSmoothY; 

y luego inicializar alfa y fSmoothY

 // alpha should be in [0, 1], where a larger value = less smoothing alpha = 0.5; fSmoothY = ptPosition.y; 

Por último, aplique el filter con

 fSmoothY = fSmoothY * (1-alpha) + ptPosition.y * alpha;