以下のスクリーンショットでわかるように、円 (SKShapeNode) と線 (SKShapeNode) の間には大きなギャップがあります。
当然のことながら、これらのアイテムは両方とも衝突時に接触している必要があります。
これが私のコードです:
- (void)createSceneContents
{
[self setBackgroundColor:[SKColor blackColor]];
// Floor
//
SKShapeNode *floorShapeNode = [SKShapeNode node];
CGFloat threeQuartersDown = CGRectGetMidY(self.frame) * 0.5f;
CGPoint floorFromPoint = CGPointMake(CGRectGetMinX(self.frame), threeQuartersDown);
CGPoint floorToPoint = CGPointMake(CGRectGetMaxX(self.frame), threeQuartersDown);
CGMutablePathRef floorLinePath = CGPathCreateMutable();
CGPathMoveToPoint(floorLinePath, NULL, floorFromPoint.x, floorFromPoint.y);
CGPathAddLineToPoint(floorLinePath, NULL, floorToPoint.x, floorToPoint.y);
[floorShapeNode setPath:floorLinePath];
[floorShapeNode setPhysicsBody:[SKPhysicsBody bodyWithEdgeFromPoint:floorFromPoint toPoint:floorToPoint]];
[floorShapeNode setStrokeColor:[SKColor whiteColor]];
[floorShapeNode setLineWidth:0.5f];
[self addChild:floorShapeNode];
// Player
//
[self setPlayerNode:[BZPlayerNode node]];
[self.playerNode setPhysicsBody:[SKPhysicsBody bodyWithCircleOfRadius:(CGRectGetWidth(self.playerNode.frame) / 2.0f)]];
[self.playerNode.physicsBody setDynamic:YES];
[self.playerNode setPosition:CGPointMake(CGRectGetMidX(self.frame) - CGRectGetMidX(self.playerNode.frame), CGRectGetMidY(self.frame) - CGRectGetMidX(self.playerNode.frame) + 100.0f)];
[self addChild:self.playerNode];
}
SKShapeNode の +node メソッド:
+ (instancetype)node
{
BZPlayerNode *playerNode = [super node];
if (playerNode) {
[playerNode setFillColor:[SKColor whiteColor]];
[playerNode setPath:CGPathCreateWithEllipseInRect(CGRectMake(0.0f, 0.0f, 80.0f, 80.0f), NULL)];
}
return playerNode;
}
私がどこで間違ったのか誰か知っていますか?
ありがとう