Sprite Kit - 更改SKShapeNode的锚点并不会改变SKPhysicalBody的位置

时间:2014-07-09 12:41:26

标签: ios xcode swift sprite-kit

我更改了SKSpriteNode的锚点,但似乎SKPhysicalBody不正确。

如果没有设置我的精灵的锚点,它会在屏幕外显示一点,使用锚点修复此问题。 但是在设置锚点之后,物理体仍然在之前的位置(在更改锚点之前)

func addGround() {
    let gSize = CGSizeMake(self.size.width/4*3, 120);
    let ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize);
    ground.name = gName;

    ground.anchorPoint = CGPointZero
    ground.position = CGPointMake(0, 0);

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size);
    ground.physicsBody.restitution = 0.0;
    ground.physicsBody.friction = 0.0;
    ground.physicsBody.angularDamping = 0.0;
    ground.physicsBody.linearDamping = 0.0;
    ground.physicsBody.allowsRotation = false;
    ground.physicsBody.usesPreciseCollisionDetection = true; //accurate collision
    ground.physicsBody.affectedByGravity = false;
    ground.physicsBody.dynamic = false;
    ground.physicsBody.categoryBitMask = gBitmask;
    ground.physicsBody.collisionBitMask = pBitmask;
}

正确绘制框,但启用skView.showPhysics向我显示身体仍然不正确。

左侧是屏幕中间看到的盒子的物理主体.... 物理机构向左斜下方。

1 个答案:

答案 0 :(得分:2)

anchorPoint是纹理相对于节点位置的位置。换句话说,更改anchorPoint会改变相对于精灵位置绘制纹理的位置。

因此,物理体形状不受anchorPoint变化的影响,因为节点的位置不受影响。

请注意,在4英寸iPhone上,你的地面体的大小将是从屏幕左下角延伸的426x120(假设场景的位置为0,0)。

另请注意,碰撞形状周围有一个小阈值,可以防止它们准确排列,如果使用与图像完全相同的尺寸,可能会有一个小间隙。因此,您可能需要使形状稍微小一些。