与Sprite Kit的bodyWithEdgeLoopF​​romPath坐标系统混淆

时间:2014-03-02 12:58:38

标签: ios objective-c sprite-kit

我将此图像作为SKSpriteNode:

enter image description here

此图片的尺寸为394像素x 347像素。

稍后在代码中,我将带有bodyWithPolygonFromPath函数的物理体添加到带有图像的SKSpriteNode上。

我给出的路径是:

CGMutablePathRef shipPath = CGPathCreateMutable();
CGPathMoveToPoint(shipPath, NULL, 0,0);
CGPathAddLineToPoint(shipPath, NULL, 0,347);
CGPathAddLineToPoint(shipPath, NULL, 394, 347);
CGPathAddLineToPoint(shipPath, NULL, 394, 0);

CGPathCloseSubpath(shipPath);

这条路径应该精确地追踪宇宙飞船图像周围的方形物理路径,以检测从上方落下的岩石的勾结。

这是程序输出: enter image description here

下一个屏幕截图解释了问题:

enter image description here

我哪里错了?我希望我能很好地解释这个问题。

2 个答案:

答案 0 :(得分:1)

查看documentation

+ (SKPhysicsBody *)bodyWithEdgeLoopFromPath:(CGPathRef)path
  

路径 - 核心图形路径。这些点是相对于   拥有节点的来源。路径不得相交。

SKNode中的原点由其anchorPoint定义,默认为(0.5, 0.5),它是节点的中心。

为什么它居中?

精灵的纹理是基于anchorPoint因子相对于节点位置绘制的。它的默认值(0.5, 0.5)将纹理置于节点位置的中心位置。

您可能想调整锚点,但它会改变您不想要的纹理位置。相反,在创建物理体时调整路径。

虽然SKScene不同。对于SKScene,默认值为(0, 0),它对应于视图框架矩形的左下角。要更改为中心,请指定(0.5, 0.5)

基于:SKPhysicsBody Class ReferenceSKNode Class ReferenceSKScene Class Reference

答案 1 :(得分:0)

在SpriteKit中,精灵有一个默认坐标系,其中(0,0)是中心,尽管SKScene有一个默认坐标系,其中(0,0)是左下角。您可以通过调整Sprite的anchorPoint属性来更改它。