【问题标题】:SKPhysicsBody from a line (not closed polygon)SKPhysicsBody 来自一条线(非封闭多边形)
【发布时间】:2015-01-28 05:41:18
【问题描述】:

我正在尝试从场景中绘制的线创建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;
}

【问题讨论】:

    标签: ios objective-c sprite-kit


    【解决方案1】:

    线是否需要移动或对碰撞做出反应,或者只是引起碰撞?

    如果是前者,你需要一个动态的身体——动态的身体必须有体积(嗯,面积),这样一个开放的路径就行不通了。在这种情况下,您可以将路径沿自身循环返回以关闭它(可能很容易编码但很难正常工作)或使用一组窄矩形体来近似路径。

    如果是后者,静态主体就可以了。您可以使用bodyWithEdgeFromPoint:toPoint: 从两点之间的线段创建一个,或者使用bodyWithEdgeChainFromPath: 从一系列线段创建一个。

    【讨论】:

    • 感谢 rickster 的回复。我的目标 C 能力非常小,所以我的解决方案是在绘制线条时自动填充形状......这不是完美的,因为如果线条太直,那么它就不起作用,但是 90%那段时间我很自然地一直在画线,这些线被填充并最终看起来像橘子片,因此是一个多边形。
    • 也许您应该考虑使用 bodyWithEdgeFromPoint:toPoint,正如 rickster 指出的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多