繁体   English   中英

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

[英]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)

基于: SKPhysicsBody类参考SKNode类参考SKScene类参考

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM