Ios 具有弯曲路径的Sprite套件物理盒不正确

Ios 具有弯曲路径的Sprite套件物理盒不正确,ios,objective-c,sprite-kit,skphysicsbody,Ios,Objective C,Sprite Kit,Skphysicsbody,我正在尝试制作一个圆弧形状的物体,如果在该形状上画一条线,则会检测到并消除碰撞。我用以下代码创建了一个节点 UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(-100, 0)]; [path addArcWithCenter:CGPointZero radius:100 startAngle:M_PI endAngle:0 clockwise:NO]; [path addLineToPoin

我正在尝试制作一个圆弧形状的物体,如果在该形状上画一条线,则会检测到并消除碰撞。我用以下代码创建了一个节点

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(-100, 0)];
[path addArcWithCenter:CGPointZero radius:100 startAngle:M_PI endAngle:0 clockwise:NO];
[path addLineToPoint:CGPointMake(85, 0)];
[path addArcWithCenter:CGPointZero radius:85 startAngle:0 endAngle:M_PI clockwise:YES];
[path addLineToPoint:CGPointMake(-100, 0)];
[path closePath];

SKShapeNode *shapeNode = [SKShapeNode shapeNodeWithPath:path.CGPath centered:YES];
shapeNode.fillColor = [SKColor whiteColor];
shapeNode.strokeColor = [SKColor whiteColor];
SKTexture *texture = [self.view textureFromNode:shapeNode];
sprite = [SKSpriteNode spriteNodeWithTexture:texture];
sprite.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:shapeNode.path];
sprite.physicsBody.categoryBitMask = 0x1 << 0;
sprite.physicsBody.contactTestBitMask = 0x1 << 1;
sprite.physicsBody.dynamic = YES;
sprite.physicsBody.collisionBitMask = 0x0;
sprite.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild: sprite];
UIBezierPath*path=[UIBezierPath-bezierPath];
[path-moveToPoint:CGPointMake(-100,0)];
[path addArcWithCenter:CGPointZero半径:100星形缠结:M_PI端角:0顺时针:否];
[path addLineToPoint:CGPointMake(85,0)];
[path ADDARCWITH CENTER:CGPOINT零半径:85星形缠结:0端角:M_PI顺时针:是];
[path addLineToPoint:CGPointMake(-100,0)];
[path closePath];
SKShapeNode*shapeNode=[SKShapeNode-shapeNodeWithPath:path.CGPath-centered:YES];
shapeNode.fillColor=[SKColor-whiteColor];
shapeNode.strokeColor=[SKColor-whiteColor];
SKTexture*texture=[self.view textureFromNode:shapeNode];
sprite=[SkSpritodeSpritodeWithTexture:texture];
sprite.physicsBody=[SKPhysicsBody WithPolygonFromPath:shapeNode.path];

sprite.physicsBody.categoryBitMask=0x1通过使用[SKPhysicsBody with EdgeloopFromPath:]而不是[SKPhysicsBody with PolygonFromPath:]似乎可以纠正与之碰撞的对象,但线条物理体没有调用DidBeginContact。线条是否有边循环,还是多边形?边循环不会相互碰撞。多边形和边循环会。当它有一个边循环时,碰撞作用于移动的对象,但当在其上创建一个与物理体相交的物理体时,它似乎不会记录碰撞。当它是多边形时,它有一种奇怪的行为,即使用[SKPhysicsBody WithEdgeloopFromPath:]而不是[SKPhysicsBody WithPolygonFromPath:]将物理体视为具有所有碰撞的半圆形它似乎纠正了与之碰撞的对象,但线物理体没有调用DidBegincontact。您的线是有边循环还是多边形?边循环不会相互碰撞。多边形和边循环会。当它有一个边循环时,碰撞作用于移动的对象,但当在其上创建一个与物理体相交的物理体时,它似乎不会记录碰撞。当它是一个多边形时,它会有一种奇怪的行为,将物理体视为一个具有所有碰撞的半圆形