我将此图像作为SKSpriteNode:
此图片的尺寸为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);
这条路径应该精确地追踪宇宙飞船图像周围的方形物理路径,以检测从上方落下的岩石的勾结。
这是程序输出:
下一个屏幕截图解释了问题:
我哪里错了?我希望我能很好地解释这个问题。
答案 0 :(得分:1)
+ (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 Reference,SKNode Class Reference和SKScene Class Reference
答案 1 :(得分:0)
在SpriteKit中,精灵有一个默认坐标系,其中(0,0)是中心,尽管SKScene有一个默认坐标系,其中(0,0)是左下角。您可以通过调整Sprite的anchorPoint
属性来更改它。