我更改了 SKSpriteNode 的 anchor ,但 SKPhysicalBody 似乎不正确。
如果不设置 Sprite 的 anchor ,它会稍微出现在屏幕之外,使用 anchor 解决了这个问题。 但设置 anchor 后, body 仍处于之前的位置(更改 anchor 之前)
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
显示物理体仍然不正确。
最佳答案
anchorPoint 是纹理相对于节点位置的位置。换句话说,更改 anchor 会更改相对于 Sprite 位置绘制纹理的位置。
因此,物理 body 形状不会受到 anchor 更改的影响,因为节点的位置不受影响。
请注意,在 4 英寸 iPhone 上,地面主体的尺寸将为 426x120,从屏幕左下角延伸(假设场景的位置为 0,0)。
另请注意,碰撞形状周围有一个小阈值,这会阻止它们完全对齐,如果您使用与图像完全相同的尺寸,可能会存在小间隙。因此,您可能需要将形状缩小一点。
关于ios - Sprite Kit - 更改 SKShapeNode 的 anchor 不会更改 SKPhysicalBody 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654001/