0

アプリで物理と衝突検出にスプライト キットを使用しています。

いくつかのボールが箱に落ちています。ボックスの内側は bodyWithPolygonFromPath を使用して定義されます

いくつかのボールを箱に落とすと、まっすぐ落ちます。

ボックスを定義するコードは次のとおりです。

SKSpriteNode* boxFront = [SKSpriteNode spriteNodeWithImageNamed: [boxData objectForKey: @"box_image"]];
boxFront.position = CGPointMake(0, -screenHeight*0.22);
boxFront.zPosition = 10;
[self addChild: boxFront];

CGFloat offsetX = boxFront.frame.size.width * boxFront.anchorPoint.x;
CGFloat offsetY = boxFront.frame.size.height * boxFront.anchorPoint.y;

CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, 3 - offsetX, 129 - offsetY);
CGPathAddLineToPoint(path, NULL, 0 - offsetX, 129 - offsetY);
CGPathAddLineToPoint(path, NULL, 0 - offsetX, 85 - offsetY);
CGPathAddLineToPoint(path, NULL, 200 - offsetX, 85 - offsetY);
CGPathAddLineToPoint(path, NULL, 200 - offsetX, 129 - offsetY);
CGPathAddLineToPoint(path, NULL, 197 - offsetX, 129 - offsetY);
CGPathAddLineToPoint(path, NULL, 196 - offsetX, 87 - offsetY);
CGPathAddLineToPoint(path, NULL, 3 - offsetX, 87 - offsetY);

CGPathCloseSubpath(path);

boxFront.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
boxFront.physicsBody.dynamic = NO;

SKShapeNode* shape = [[SKShapeNode alloc] init];
shape.path = path;
shape.strokeColor = [UIColor redColor];
shape.zPosition = 101;
shape.lineWidth = 2;
[boxFront addChild: shape];

SKShapeNode の最後のビットは、デバッグ目的でボックスの輪郭を描画するだけです。描画されたボックスは、衝突ボックスがあると予想される場所です。

ボックスにドロップするボールのコードは次のとおりです。

SKSpriteNode* circle1 = [SKSpriteNode spriteNodeWithImageNamed: @"ball.png"];
circle1.position = CGPointMake(0, screenHeight*0.7);
circle1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius: 20];
circle1.zPosition = 100;
[self addChild: circle1];

SKSpriteNode* circle2 = [SKSpriteNode spriteNodeWithImageNamed: @"ball.png"];
circle2.position = CGPointMake(-10, screenHeight);
circle2.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius: 20];
circle2.zPosition = 100;
[self addChild: circle2];

上記のコード スニペットの self のすべてのインスタンスは、SKScene に直接接続されている同じ SKNode です。

衝突検出が無視される原因について何か提案はありますか?

4

1 に答える 1

0

ボックスまたはボールのphysicsBody.categoryBitMaskandプロパティを宣言しているとは思いません。physicsBody.collisionBitMaskオブジェクトに対してそれらを定義しない場合、コードはどの物理体が相互作用する必要があるかを認識できません。

于 2014-04-07T20:39:28.130 に答える