1

卵形の SKSprite ノードに物理演算をシミュレートしています。ただし、assertion failed エラーが発生します。

アサーションに失敗しました: (edge.LengthSquared() > 1.19209290e-7F * 1.19209290e-7F)、関数セット、ファイル /SourceCache/PhysicsKit_Sim/PhysicsKit-6.5.4/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp、180 行目.

以下はコードです:

self.egg = [SKSpriteNode spriteNodeWithImageNamed:IMAGE_NAME_EGG];
    [self.egg setScale:0.2];
    self.egg.position = CGPointMake(self.size.width/2,self.size.height - self.egg.size.height/2);
    self.egg.name = IMAGE_NAME_EGG;

    CGPoint startPoint = CGPointMake(0, self.egg.size.height*0.4);
    CGPoint endPoint = CGPointMake(self.egg.size.width, startPoint.y);
    CGPoint controlPointLeft = CGPointMake(startPoint.x, self.egg.size.height);
    CGPoint controlPointRight = CGPointMake(endPoint.x, controlPointLeft.y);


    CGMutablePathRef pathRef = CGPathCreateMutable();        
    CGPathMoveToPoint(pathRef, NULL, startPoint.x, startPoint.y);
    CGPathAddQuadCurveToPoint(pathRef, NULL, controlPointLeft.x, controlPointLeft.y, self.egg.size.width/2, controlPointLeft.y);
    CGPathAddQuadCurveToPoint(pathRef, NULL, controlPointRight.x, controlPointRight.y, endPoint.x,endPoint.y);
    CGPathAddArc(pathRef, NULL, self.egg.size.width/2, startPoint.y, self.egg.size.width/2, 0, M_PI, NO);

    self.egg.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:pathRef];
    self.egg.physicsBody.dynamic = YES;
    self.egg.physicsBody.categoryBitMask = eggCategory;
    self.egg.physicsBody.contactTestBitMask = rabbitCategory;
    self.egg.physicsBody.collisionBitMask = rabbitCategory;
    self.egg.physicsBody.allowsRotation = YES;
    [self addChild:self.egg];

どうしたの?誰かが私を修正するのを助けることができますか? どうもありがとうございます!

4

3 に答える 3

2

「 bodyWithPolygonFromPath: 」を使用する場合は、パスが次の条件を満たしていることを確認してください。

1)。凸多角形パス 2)。反時計回り巻き 3)。自己交差はありません。//ポイントは、所有ノードの原点に対して相対的に指定されます。

ここの SKPhysicsBody の適用クラス参照で見つけることができます: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html#//apple_ref/occ/clm/SKPhysicsBody/ bodyWithPolygonFromPath :

于 2014-03-31T13:30:42.603 に答える
0

三角形のパスを作成しようとしたときに、古い iOS7 iPhone でこのエラーが発生しました。最終行を追加してパスを開始点に戻すと、エラーが発生することが判明しました (ただし、新しい iOS バージョンではこれが許可されています)。IE:

CGPathMoveToPoint(path, nil, self.size.width/2, self.size.height/2)
CGPathAddLineToPoint(path, nil, -self.size.width/2, 0.0)
CGPathAddLineToPoint(path, nil, self.size.width/2, -self.size.height/2)
CGPathAddLineToPoint(path, nil, self.size.width/2, self.size.height/2) //REMOVED THIS LINE TO FIX
CGPathCloseSubpath(path)

これは、評価するには小さすぎるエッジがあった理由を説明しています。2 つの同じポイント間のエッジは 0 です!

于 2014-12-31T04:30:16.257 に答える