我正在尝试从场景中绘制的线创建SKPhysicsBody
。此行不是封闭的多边形,而是在touchesMoved
中跟踪用户手指时创建的。我需要从这条线上创建一个物理体,这样一个球就像它是一个壁架一样反弹,但我似乎无法弄清楚如何做到这一点。
我发现的最接近的是bodyWithPolygonFromPath
,但只有在线被关闭为多边形时才有效。
我对iOS编程很新(这是我的第一个项目)所以请放轻松!
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[lineNode removeFromParent];
CGPathRelease(pathToDraw);
UITouch* touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
pathToDraw = CGPathCreateMutable();
CGPathMoveToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
lineNode = [SKShapeNode node];
lineNode.path = pathToDraw;
lineNode.strokeColor = [SKColor redColor];
[self addChild:lineNode];
}
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
CGPathAddLineToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
lineNode.path = pathToDraw;
}
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
lineNode.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:lineNode.path];
lineNode.physicsBody.categoryBitMask = paddleCategory;
lineNode.physicsBody.collisionBitMask = ballCategory | paddleCategory;
lineNode.physicsBody.contactTestBitMask = ballCategory | paddleCategory;
}
答案 0 :(得分:0)
线是否需要移动或对碰撞做出反应,或者只是造成碰撞?
如果是前者,你需要一个动态的身体 - 一个动态的身体必须有体积(井,面积),所以开放的道路不会起作用。在这种情况下,您可以将路径沿自身循环以关闭它(可能很容易编码但很难使工作正常)或使用一组窄矩形体近似路径。
如果是后者,静态的身体会做。您可以使用bodyWithEdgeFromPoint:toPoint:
从两个点之间的线段创建一个,也可以使用bodyWithEdgeChainFromPath:
从一系列线段创建一个。