【问题标题】:Sprite Kit - Changing SKShapeNode's anchor point doesn't change SKPhysicalBody positionSprite Kit - 改变 SKShapeNode 的锚点不会改变 SKPhysicalBody 的位置
【发布时间】:2014-07-09 12:41:25
【问题描述】:

我更改了我的 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 显示身体仍然不正确。

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

【问题讨论】:

  • 可以加个截图吗?这将有助于使正在发生的事情更加清晰。
  • 在设置 ground.position 之前设置锚点
  • @0x7fffffff 已添加截图。
  • @meisenman 我注意到我在这里复制了旧版本的代码。我已经用位置之前设置的锚点更新了它
  • 要制作地面,您只需设置 ground.position=CGPointMake(self.size.x/2,60);// 特定于您的地面。另外,删除锚点。

标签: ios xcode swift sprite-kit


【解决方案1】:

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

因此,物理体形状不受锚点更改的影响,因为节点的位置不受影响。

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

另请注意,碰撞形状周围有一个小阈值,可防止它们完全对齐,如果您使用与图像完全相同的尺寸,可能会有一个小间隙。因此,您可能需要将形状缩小一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多