SpriteKit - 节点调整位置一点点

时间:2014-07-23 21:09:50

标签: ios sprite-kit skspritenode

我有许多个人节点(平铺)构成我游戏的背景。它们每个都是32x32p,并且彼此相邻以形成地板/屋顶/障碍物。我从JSON文件加载地图,并在初始化场景时根据JSON文件的内容将节点定位在背景层/节点上。

这很好用,但是,当移动背景层/物理引擎正在做它的事情时,我遇到了一些错误。一些节点彼此远离1个点/像素,在它们之间产生间隙。由于背景颜色不同,这看起来非常糟糕。

问题主要发生在地图上(不是马上),同时我要么向玩家施加冲动,要么物理引擎正在弹跳玩家(或类似玩家)。

这是一张说明我问题的图片:

Illustrative image. Click to open in new tab (Click to open in separate tab)

正如您所看到的,在节点中的 o d 之间,存在间隙(在完整尺寸中更容易看到)链接中的图像)。在游戏过程中偶尔会出现许多这样的差距,它们只会出现一两秒钟。有时他们会在玩家停止移动时停留。

我通过增加/减少didSimulatePhysics来移动x-value中的玩家。最后在didSimulatePhysics中,我将此方法称为将worldNode置于播放器的中心位置:

- (void)centerViewOn:(CGPoint)centerOn {
  CGFloat x = Clamp(centerOn.x, self.size.width / 2, _bgLayer.layerSize.width - self.size.width / 2);

  _worldNode.position = CGPointMake(-x, _worldNode.position.y);
}

worldNode包含bgLayer,其中包含所有单独的背景节点,以及播放器本身。

解决此问题的最佳方法是什么?一个合理的解决方案可能是制作每个33x32p的瓷砖,因此它们是重叠的。在这种情况下,你不会看到偶尔出现的差距。但我认为最好“杀死”问题而不是隐藏它。 有没有经验像这样布置他们的地图?或者之前有任何人遇到过同样的问题?如果是这样,你是如何解决的?

提前致谢!

1 个答案:

答案 0 :(得分:1)

这是基于@ LearnCocos2D注释的Int解决方案:

- (void)centerViewOn:(CGPoint)centerOn {
  CGFloat x = Clamp(centerOn.x, self.size.width / 2, _bgLayer.layerSize.width - self.size.width / 2);

  _worldNode.position = CGPointMake(Int(-x), Int(_worldNode.position.y));
}