如何将 SKPhysicsBody(texture: size:) 居中于 SKSpriteNode 锚点以外的点

Posted

技术标签:

【中文标题】如何将 SKPhysicsBody(texture: size:) 居中于 SKSpriteNode 锚点以外的点【英文标题】:How to center a SKPhysicsBody(texture: size:) in a point other than the SKSpriteNode anchor point 【发布时间】:2015-11-03 19:31:44 【问题描述】:

SKSpriteNode 锚点设置为 (0.5, 0)。

如何在不更改 (0.5, 0) 锚点的情况下创建一个以 (0.5,0.5) 为中心的 SKPhysicsBody(texture: size:) 物理体。

【问题讨论】:

【参考方案1】:

您可以使用+ bodyWithRectangleOfSize:center: 或 + bodyWithCircleOfRadius:center:,像这样:

 let sprite = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100.0, height: 100.0))
 sprite.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
 sprite.anchorPoint = CGPoint(x: 0.5, y: 0.0)

 sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size, center: CGPoint(x: 0, y: sprite.size.height/2.0))
 sprite.physicsBody?.affectedByGravity = false // just added for easier debugging
 addChild(sprite)

Center 参数表示正方形/圆在所属节点坐标系中的原点。

【讨论】:

我需要使用 SKPhysicsBody(texture: size:) 来获得具有纹理形状但大小不同的主体。 @crvo84 啊,好吧...那么,更改节点锚点的原因是什么?您不能将其保留为 (0.5,0.5) 并相应地更改节点的位置吗? 一篇关于锚点和物理体的有用帖子。 ***.com/a/22095999/3402095 在场景中,我需要围绕 (0.5, 0) 处的锚点旋转精灵。如果有一种方法可以更改身体中心,那就太好了,这样我就不需要相应地更改我的所有代码。谢谢!

以上是关于如何将 SKPhysicsBody(texture: size:) 居中于 SKSpriteNode 锚点以外的点的主要内容,如果未能解决你的问题,请参考以下文章

Spritekit 碰撞

SpriteKit碰撞检测无法正常工作

将精灵附加到 SKPhysicsBody

如何使用 SKPhysicsBody 复制 SKSpriteNode?

iOS -- SpriteKit框架之SKPhysicsBody的移动和连接

更改 SKPhysicsBody 参数无效