我更改了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
向我显示身体仍然不正确。
答案 0 :(得分:2)
anchorPoint是纹理相对于节点位置的位置。换句话说,更改anchorPoint会改变相对于精灵位置绘制纹理的位置。
因此,物理体形状不受anchorPoint变化的影响,因为节点的位置不受影响。
请注意,在4英寸iPhone上,你的地面体的大小将是从屏幕左下角延伸的426x120(假设场景的位置为0,0)。
另请注意,碰撞形状周围有一个小阈值,可以防止它们准确排列,如果使用与图像完全相同的尺寸,可能会有一个小间隙。因此,您可能需要使形状稍微小一些。