使用SpriteKit绘制线并检测碰撞

时间:2016-04-15 09:05:35

标签: ios objective-c sprite-kit skshapenode

我设法用随机CGPoints数组绘制一条线。

    -(void)drawLine
    {
    SKShapeNode *mainLine = [SKShapeNode node];
    CGMutablePathRef pathToDraw = CGPathCreateMutable();
    CGPathMoveToPoint(pathToDraw, NULL, 0, 0);

    for(int i;i<pointsInMyView.count;i++)
    {
        CGPoint myPoint = [pointsInMyView[i] CGPointValue];
        CGPathAddLineToPoint(pathToDraw, NULL, myPoint.x, myPoint.y);
        mainLine.path = pathToDraw;
    }
    [mainLine setLineWidth:40];
    [mainLine setStrokeColor:[SKColor whiteColor]];
    mainLine.name = @"mainLine";
    [self addChild:mainLine];


}

如您所见,我正在绘制SKShapeNode。我的目标是检查我的SKSpriteNode与我的线路的碰撞。但是,当然,这个形状节点会生成一个包含我所有行的所有点的帧,在这种情况下,我的ShapeNode就在我的视野中。我的SpriteNode始终检测到与此ShapeNode的冲突。 我想我应该绘制多个不同的ShapeNodes,因此每个节点都有自己的帧。但如果我这样做,我的线路没有连接。 是否有一些解决方案可以按节点绘制这个节点,并且仍然可以得到很好的线。

1 个答案:

答案 0 :(得分:3)

不幸的是,SpriteKit中的节点不能是凹的(http://mathworld.wolfram.com/ConcavePolygon.html),而是相互交叉的线。

您必须为相邻点之间的每条线创建单独的节点,然后可能将它们连接在一起。你可以通过以下方式做到这一点:

  1. 创建第一个细分,然后将后续细分添加为子细分 第一段。
  2. 为整行创建一个不可见的节点,并添加该行 段作为该节点的子节点。
  3. 为每个细分创建物理实体并将其连接起来     SKPhysicsJointFixed