我有许多个人节点(平铺)构成我游戏的背景。它们每个都是32x32p,并且彼此相邻以形成地板/屋顶/障碍物。我从JSON文件加载地图,并在初始化场景时根据JSON文件的内容将节点定位在背景层/节点上。
这很好用,但是,当移动背景层/物理引擎正在做它的事情时,我遇到了一些错误。一些节点彼此远离1个点/像素,在它们之间产生间隙。由于背景颜色不同,这看起来非常糟糕。
问题主要发生在地图上(不是马上),同时我要么向玩家施加冲动,要么物理引擎正在弹跳玩家(或类似玩家)。
这是一张说明我问题的图片:
(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的瓷砖,因此它们是重叠的。在这种情况下,你不会看到偶尔出现的差距。但我认为最好“杀死”问题而不是隐藏它。 有没有经验像这样布置他们的地图?或者之前有任何人遇到过同样的问题?如果是这样,你是如何解决的?
提前致谢!
答案 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));
}