0

我正在尝试创建一个椭圆。我用过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.

4

1 回答 1

0

你可以把边缘体想象成一个没有体积的物体,只有边缘,一个有“负空间”的物体——这就是你的物体被夹在中间的原因。正如Sprite Kit 编程指南所说:

边缘和体积之间的主要区别在于,边缘允许在其自身边界内移动,而体积被视为实体对象。

由于您希望您的椭圆成为一个实体对象,因此您确实需要一个基于体积的实体。对于这些实体,您可以使用三个选项来创建它们的形状:圆形 ( bodyWithCircleOfRadius:)、矩形 ( bodyWithRectangleOfSize:) 或多边形 ( bodyWithPolygonFromPath:)。

对于椭圆形,您可能必须绘制一个多边形 - 但是,Sprite Kit 物理引擎将只接受最多具有 12 个顶点的那些(这就是您在绘制实际椭圆时遇到错误的原因)。您最好的选择是使用辅助工具绘制多边形,例如这个:http ://dazchong.com/spritekit/ - 只需拖放您的精灵并绘制路径。请记住,多边形必须是凸的(其中没有超过 180 度的角度)并且它最多可以有 12 个顶点。

另请查看此答案以了解类似问题:Ellipse SKPhysicsBody

于 2014-02-02T11:47:39.423 回答