我有许多单独的节点(图 block )构成我的游戏背景。它们都是 32x32p,并且彼此相邻放置以形成地板/屋顶/障碍物。我从 JSON 文件加载 map ,并在场景初始化时根据 JSON 文件的内容将节点放置在背景层/节点上。
这工作正常,但是,我在移动背景层/物理引擎正在做它的事情时遇到了一些错误。一些节点彼此移动 1 个点/像素,从而在它们之间产生间隙。而且由于背景是不同的颜色,这看起来很糟糕。
问题主要发生在 map 更远的地方(不是马上),同时我正在向玩家施加脉冲或物理引擎正在弹跳玩家(或类似的)。
这是说明我的问题的图片:
(Click to open in separate tab)
如您所见,在 节点 中的 o 和 d 之间,有一个间隙(在全尺寸中更容易看到)链接中的图像)。在玩游戏的过程中会时不时地出现很多这样的间隙,而且它们只会出现一两秒。有时它们会在玩家停止移动时停留。
我通过增加/减少其 x-value 来移动 didSimulatePhysics 中的播放器。然后最后在 didSimulatePhysics 我调用这个方法将 worldNode 放在播放器的中心:
- (void)centerViewOnCGPoint)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 (包含所有单独的背景节点)和播放器本身。
解决此问题的最佳方法是什么?一个可行的解决方案是让每个图 block 都为 33x32p,因此它们是重叠的。在这种情况下,您将不会看到不时出现的差距。但我认为“杀死”问题而不是隐藏它会更好。
有人有这样布置 map 的经验吗?或者以前有没有人遇到过同样的问题?如果是这样,您是如何解决的?
提前致谢!
Best Answer-推荐答案 strong>
这是基于@LearnCocos2D 评论的转换为 Int 解决方案:
- (void)centerViewOnCGPoint)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));
}
关于ios - SpriteKit - 节点稍微调整位置,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/24921017/
|