我有一些简单的代码,在块的最左边部分添加一个块精灵,如下所示:
block.position = CGPointMake((-self.size.width * 0.5), 0);
[self addChild:block];
由于锚点位于块精灵的中间。 self指的是实际的瓷砖。
这样可以正常工作,并且实际上会在tile精灵的左侧添加块。
现在我还有一个玩家精灵,如果它试图通过它可以与该块碰撞。这也很好。
问题发生在我试图让块精灵用另一个锚点显示在完全相同的位置时(我需要一个新的锚点来实现我想要创建的收缩效果 - 这看起来工作得很好btw)。 / p>
新代码变为:
block.position = CGPointMake(-(self.size.width * 0.5), -(self.size.width * 0.5));
block.anchorPoint = CGPointZero;
[self addChild:block];
新区块与第一个案例位置类似(尽管不完全相同)。 我不确定为什么位置不相同但我可以通过在x,y点加上/减去1或2来解决这个问题。
奇怪的问题是,如果我的玩家精灵现在试图在下面的棋子下面(这是一个没有任何棋子的开放式棋子)下面的那个棋盘下面,我会在玩家和棋盘之间找到一个联系人。
我甚至在SKShapeNode中添加了调试路径,以确保播放器和块精灵实际上不会发生碰撞。他们没有!但我仍然遇到碰撞事件。
玩家规模是(0.8,0.9),但我认为这不会起到很大作用。
我真的不明白为什么会发生这种情况。任何想法的家伙?
答案 0 :(得分:1)
更改精灵的锚点对物理体没有影响。
在谈论CGRect
时,矩形起点位于{0,0}点,
所以正在发生的事情是你现在有一个精灵,它的图像以锚点{0,0}为中心但是有一个物理体,从{0,0}开始并且是一个大小的精灵,意思是它以{0.5,0.5}为中心
因此,即使玩家不与精灵的图像发生碰撞,它也会与物理身体碰撞。
发生的事情是你有一个物理体,它与精灵具有相同的中心点,
但是,与之前相反的是,精灵锚点在中间,它将“适合”物理体,
现在精灵的锚点是{0,0},它导致物理体中心点实际上是精灵最左下角。
要解决此问题,您需要偏移物理实体,因此它将以新锚点为中心。
例如:
block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size center:CGPointZero];
CGPoint newCenter = CGPointMake(block.size.width, block.size.height);
block.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:block.size centre:newCenter];
祝你好运。
编辑 - 再想一想,我觉得我对偏移方向感到困惑 已进行编辑以更正它。