我正在尝试创建一个椭圆。我使用了 bodyWithEdgeLoopFromPath
,但它起作用了,但似乎有问题,因为有时其他物体会陷入其中。
,但我希望椭圆固体,所以我尝试了bodyWithPolygonFromPath
(我希望它静态)
horizontalOval = [[SKShapeNode alloc] init];
theRect = CGRectMake(0, 0, self.frame.size.width/6 , 15);
CGMutablePathRef ovalPath = CGPathCreateMutable();
CGPathAddEllipseInRect(ovalPath, NULL, theRect);
horizontalOval.path = ovalPath;
horizontalOval.fillColor = [UIColor blueColor];
horizontalOval.physicsBody.dynamic = NO;
horizontalOval.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:ovalPath];
但出现了错误
SKPhysicsBody: Error attempting to create polygon with 17 vertices, maximum is 12
如何创建复杂的路径并使它们扎实?
同样,当我在self.frame.size.width/2
的位置和self.frame.size.height/2
位置时,它不会保持中心,它向右右。
我必须 theRect = CGRectMake(-40, 0........)
才能使其中心,但是为什么是?
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: _paddleRect];
但是有13个顶点。尝试使用PaintCode
。
您可以将边缘物体视为没有音量的边缘,只是边缘,一个具有'负空间'的物体 - 这就是为什么您的物体被捕获到中间的原因。正如Sprite套件编程指南所说:
边缘和音量之间的主要区别在于,边缘允许在其自身边界内移动,而音量被认为是实体对象。
由于您希望椭圆形成为一个实体对象,因此您确实需要一个基于音量的主体。对于这些尸体,您有三个可以创建其形状的选项:圆(bodyWithCircleOfRadius:
),矩形(bodyWithRectangleOfSize:
)或多边形(bodyWithPolygonFromPath:
)。
对于椭圆形形状,您可能必须绘制多边形 - 但是,Sprite Kit Physics引擎只会接受最多12个顶点的引擎(这就是为什么在绘制实际椭圆时会遇到错误的原因)。最好的选择是使用辅助工具绘制多边形,例如:http://dazchong.com/spritekit/-只需拖动和删除您的精灵并绘制路径即可。请记住,多边形必须是凸(内部180度以上无角),并且最多可以具有12个顶点。
还可以查看此答案是否有类似的问题:椭圆形Skphysicsbody