SpriteKit - SKSpriteNode的物理体不与CGPath相匹配

3

我有一个看起来像梯形的SKSpriteNode,代码如下:

bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(0, 0)];
[bezierPath addLineToPoint:CGPointMake(90, 90)];
[bezierPath addLineToPoint:CGPointMake(374, 90)];
[bezierPath addLineToPoint:CGPointMake(462, 0)];

CGPathRef path2 = bezierPath.CGPath;
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path2];
self.physicsBody.dynamic = NO;

我记得在某个地方读到过,SKSpriteNode必须是凸的,而这个形状显然是凸的。程序中发生的情况是,当车辆经过这个梯形隆起物时,似乎会出现车辆下沉到梯形下方的情况。有人能帮我解决这个问题吗?

1个回答

5
那是顺时针绕,需要逆时针绕。将你的点的顺序颠倒过来。

这不是更适用于路径填充规则吗?我很想知道它是否也适用于此处。我猜使用 closePath 可能会解决问题,或者这是一个坐标系定位问题。 - Matt
这也适用于碰撞。来自SKPhysicsBody文档的描述:“具有逆时针缠绕和无自交的凸多边形路径。这些点是相对于所属节点的原点指定的。” 这种方向要求在其他物理引擎中也很常见,例如Chipmunk。 - Graham Perks
我刚刚按照你的建议做了,看起来产生了相同的效果。我还将bezierPath更改为常规的CGMutablePathRef。 - Burrito411
我会仔细检查物理形状是否正确地锚定到视觉坐标上。太多次了,我的精灵显示在一个位置,而物理偏移在一侧。 - Graham Perks
我的天啊,我真是个蠢货。刚意识到锚点不正确,我的观点都是无效的。干杯! - Burrito411
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接