我一直在努力解决这个问题,这似乎深藏在spritekit物理引擎中。
我的第一个问题是:Spritekit是否在与主线程不同的线程中处理其物理更新?
我有一个"世界"场景中的一个节点,我四处移动来模拟一个摄像机"视图。因此,我可以将相机放在中心位置。在我的播放器角色节点上。由于玩家上下跳跃很多,我想平滑相机。没有相机平滑,没有问题。但是当我添加相机平滑时,(例如从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;
如果我从didSimulatePhysics
调用上述代码,则完全相同。每当它掉落时它都会断断续续(由于Y相机平滑)。
当绘制出来时,你可以看到玩家Y(红线)在帧的过程中出现了口吃。
我如何解决这个问题,或者解决这个问题,如果它无法真正解决问题?
答案 0 :(得分:0)
我建议您应用无限脉冲响应(IIR)滤镜来平滑相机。你可以通过......来做到这一点。
首先,声明实例变量
CGFloat alpha;
CGFloat fSmoothY;
然后初始化alpha和fSmoothY
// alpha should be in [0, 1], where a larger value = less smoothing
alpha = 0.5;
fSmoothY = ptPosition.y;
最后,使用
应用过滤器fSmoothY = fSmoothY * (1-alpha) + ptPosition.y * alpha;