[英]Confused with Sprite Kit's bodyWithEdgeLoopFromPath coordinate system
我将此图像作为SKSpriteNode:
此图片的尺寸为394px X 347px。
稍后在代码中,我将带有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);
该路径应该精确地跟踪宇宙飞船图像周围的方形物理路径,以检测从上方落下的岩石的共谋。
这是程序输出:
下一个截图解释了问题:
我哪里错了? 我希望我已经很好地解释了这个问题。
看了一下文档后 :
+ (SKPhysicsBody *)bodyWithEdgeLoopFromPath:(CGPathRef)path
path - 核心图形路径。 这些点是相对于拥有节点的原点指定的 。 路径不得与自身相交。
SKNode
的原点由其anchorPoint定义,默认为(0.5, 0.5)
SKNode
(0.5, 0.5)
,它是节点的中心。
为什么它居中?
基于anchorPoint
因子,相对于节点位置绘制精灵的纹理。 它的默认值(0.5, 0.5)
将纹理置于节点的位置中心。
您可能想要调整锚点,但它会更改您不想要的纹理的位置。 相反,在创建物理主体时调整路径。
但SKScene
却有所不同。 对于SKScene
,默认值为(0, 0)
,它对应于视图框架矩形的左下角。 要更改为中心指定(0.5, 0.5)
。
在SpriteKit中,精灵有一个默认坐标系,其中(0,0)是中心,尽管SKScene有一个默认坐标系,其中(0,0)是左下角。 您可以通过调整Sprite的anchorPoint
属性来更改此设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.