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

エッジ ボディは、ボリュームがなく、エッジだけで、「ネガティブ スペース」のあるボディと考えることができます。これが、オブジェクトがその真ん中に引っかかる理由です。スプライト キット プログラミング ガイドには次のように書かれています。

エッジとボリュームの主な違いは、ボリュームはソリッド オブジェクトと見なされるのに対し、エッジはそれ自体の境界内での移動を許可することです。

楕円形をソリッド オブジェクトにしたいので、ボリューム ベースのボディが必要です。これらのボディの形状を作成するには、円 ( bodyWithCircleOfRadius:)、長方形 ( bodyWithRectangleOfSize:)、または多角形 ( bodyWithPolygonFromPath:) の 3 つのオプションがあります。

楕円形の場合、おそらくポリゴンを描画する必要がありますが、スプライト キットの物理エンジンは最大 12 個の頂点を持つもののみを受け入れます (そのため、実際の楕円を描画するときにエラーが発生していました)。最善の策は、次のようなヘルパー ツールを使用してポリゴンを描画することです: http://dazchong.com/spritekit/ - スプライトをドラッグ アンド ドロップしてパスを描画するだけです。多角形は凸状 (内部に 180 度を超える角度がない) である必要があり、最大 12 個の頂点を持つことができることに注意してください。

同様の問題については、この回答も確認してください: Ellipse SKPhysicsBody

于 2014-02-02T11:47:39.423 に答える