Ios Physicsbody不';t坚持节点';s锚点

Ios Physicsbody不';t坚持节点';s锚点,ios,sprite-kit,skphysicsbody,Ios,Sprite Kit,Skphysicsbody,我的场景中有一组矩形,它们的物理实体与矩形大小相同。我喜欢锚定我所有的物体到CGPointZero,但是我注意到当我这样做时,身体仍然锚定在中间。换句话说,我的物理体的位置比视觉表示的左侧低100个像素 下面是一段简单的代码: SKSpriteNode* square = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(width, height)]; square.anchorPoint = CGPo

我的场景中有一组矩形,它们的物理实体与矩形大小相同。我喜欢锚定我所有的物体到CGPointZero,但是我注意到当我这样做时,身体仍然锚定在中间。换句话说,我的物理体的位置比视觉表示的左侧低100个像素

下面是一段简单的代码:

SKSpriteNode* square = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(width, height)];
square.anchorPoint = CGPointZero; //position based on bottom-left corner
square.position = CGPointMake(x, y);

square.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(width, height)];
如有任何解决此问题的想法或建议,将不胜感激。例如,如果我能想象物理体,这可能会有所帮助,但我不知道如何做到


更新:所以我通过简单地不设置锚点和重新定位我的矩形解决了这个问题。所以问题仍然存在,但我有一个变通办法,而且变通办法很有效。

只有在设置spriteNode的位置时,您才需要主播点。我不太明白为什么需要将physicsBody(我想它与节点大小相同)移动到一个角落。。。 但是您可能会发现这个类方法[SKPhysicsBody WithPolygonFromPath:path]很有用


这是一个很好的生成器:

我写这篇文章是为了弥补苹果的不足:

使用
pathForRectangleOfSize:withAnchorPoint:
将对
bodyWithRectangleOfSize:
的调用替换为对以下问题的简要说明:“创建以所属节点原点为中心的矩形物理体。”

编辑:7.1中有一个新的API来提供这种监督

+ (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center

我自己在使用SpriteKit时遇到过这个问题。不幸的是,基于创建物理实体和实际将节点添加到场景的时间,似乎存在一些问题。如果您从代码中交换顺序,并确保在节点实际位于渲染树中之前不进行任何物理更改,则应解决“奇怪”问题,所有内容都将非常重要。

您可以使用

      [SKPhysicsBody bodyWithRectangleOfSize:size center: center];


       CGPoint center = CGPointMake(size.width*(anchorPoint.x-0.5f), size.height*(0.5f-anchorPoint.y))

应根据父节点的锚点变换边界框

我使用的是Swift,但SKPhysicsBody有点半宽和高度错误。我正在使用锚点(0,0)。然后我使用了
矩形大小
中心
的方法:

var cc = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(32, 64))
cc.physicsBody = SKPhysicsBody(rectangleOfSize: cc.size, center: CGPointMake(32/2, 64/2))

我希望这对你们也有用…谢谢

Swift 4.1

设中心点=CGPoint(x:house1.size.width/2-(house1.size.width*house1.anchorPoint.x),y:house1.size.height/2-(house1.size.height*house1.anchorPoint.y))


house1.physicsBody=SKPhysicsBody(rectangleOf:house1.size,center:centerPoint)

使用默认定位点,它应该可以解决您的问题。我也有同样的问题,我必须通过编程将场景中的每个物理体的锚点设置为x:0.5和y:0.5。这解决了我的问题。

这是一个整洁的工具,但它不能解决我的问题。问题是,物理体的锚点似乎是默认的宽度/2,高度/2,尽管我已经将其节点的锚点设置为0,0。物理体(通过上面的调用)是以精灵的{0,0}点为中心创建的。如果您的{0,0}点不在精灵的中心,则调用将无效。所以,他想把物理学从一个角落移到另一个角落,而不是太远。调用
bodyWithPolygonFromPath:
方法时,该方法处于启用状态。这有助于找到物理实体的实际位置:AnchorPoint围绕节点位置滑动纹理。锚定点对物理图形/实体没有影响,因为它仅定义纹理相对于节点位置的偏移。如果希望形状在拐角处更靠下,请将“anchorPoint”保留为默认值,并相应地更改位置。更改锚点也会对子节点的旋转和位置产生不利影响。说更改锚点会对子节点的旋转和位置产生不利影响是天真的。也许我想在0,0上旋转。考虑到所有底层图形API都在左下角工作,而web开发工作在右上角工作,我肯定会这样定位。在图形开发的宏伟计划中,从中心工作实际上是非常独特的。话虽如此,你的前两句话是清楚和正确的。我想,我希望我可以更改物理主体锚定点:\n我正在使用7.1,但仍然不起作用:(,而且链接没有显示任何关于withAnchorPoint方法的内容。[I cmd+f'd withAnchorPoint的页面]我找到了[SKPhysicsBody WithRectangleOfSize:square.size center:CGPointZero]
中心:
是7.1中添加的苹果初始值设定项。中心应该是[0-1,0-1]中的锚定点范围。新的API 7.1
center:
method…+1Thanks bro-我的头被一个类似的问题严重损坏,节点被添加到原点,直到我移动了物理分配,直到在这里发布的所有答案的位置分配之后,这是唯一一个解决了我的问题,物理体锚定点与节点锚点。谢谢!
var cc = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(32, 64))
cc.physicsBody = SKPhysicsBody(rectangleOfSize: cc.size, center: CGPointMake(32/2, 64/2))