ios - Sprite Kit - 更改 SKShapeNode 的 anchor 不会更改 SKPhysicalBody 位置

标签 ios xcode swift sprite-kit

我更改了 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/

相关文章:

swift - 用于滚动的 UIGesture 识别器?

ios - 证书身份 'iPhone Developer: ' 在钥匙串(keychain)中多次出现。协同设计工具只需要一个

ios - 保留 TableView 中数组元素的顺序

ios - 删除 UITableView 附件上的背景颜色

ios - "unrecognized selector sent to instance" swift

ios - 使用 aubio 读取文件时,在 Swift 的 ExtAudioFileOpenURL 中获取错误代码 ('wht?')

ios - 你能从另一个 xcode 项目上传一个新的 ios 应用程序版本吗?

ios - Gracenote API - 没有轨道链接数据

iphone - 下载未完全完成时限制用户播放文件

ios - UI 测试失败 - 元素和任何后代都没有键盘焦点在 secureTextField 上