Spritekit物理和相机平滑

时间:2014-12-10 09:31:25

标签: ios objective-c sprite-kit

我一直在努力解决这个问题,这似乎深藏在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(红线)在帧的过程中出现了口吃。

我如何解决这个问题,或者解决这个问题,如果它无法真正解决问题?

1 个答案:

答案 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;