CGPathMoveToPoint / CGPathAddLineToPoint方法参数令人困惑

时间:2015-03-31 12:18:29

标签: sprite-kit skspritenode skphysicsbody cgpathref

我正在使用此处提供的答案SpriteKit's SKPhysicsBody with polygon helper tool为我的精灵节点创建物理实体的多边形。

但是CGPathMoveToPoint / CGPathAddLinetoPoint方法的偏移参数令人困惑(我也无法在Apple的文档中找到引用)。

在脚本生成的代码中,offsetX和offsetY定义为:

CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x;
CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y;

在为演示提供的gif中,它是:

CGFloat offsetX = sprite.frame.size.width/2; 
CGFloat offsetY = sprite.frame.size.height/2;

这两个偏移都用于纠正CGPathMoveToPoint / CGPathAddLinetoPoint方法中的参数,如:

CGPathMoveToPoint(path, NULL, 0 - offsetX, 0 - offsetY); (for the bottom left corner of the texture)
CGPathAddLineToPoint(path, NULL, 11 - offsetX, 0 - offsetY); 
  1. 为什么我们需要这个偏移?

  2. 对于纹理的左下角,为什么我不能像(0,0)那样提供:

    CGPathMoveToPoint(path,NULL,0,0);

  3. 当精灵节点在屏幕上移动时,这个偏移量(如果需要)会改变吗?

  4. 如果父级场景的定位点位于左上角,那么这些方法的偏移应该是什么?

1 个答案:

答案 0 :(得分:0)

您所指的偏移量变量只是一个起点。您可以使用固定的起始坐标(如0,0。)轻松替换变量。

您的问题是关于物理机构,因此在这种情况下锚点不适用。物理体0,0坐标始终以节点的宽度和高度为中心。因此,虽然更改节点的锚点会影响其坐标的居中方式,但它对物理体无影响。