使用SpriteKit绘制线条并检测碰撞



我已经设法用我的随机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和我的行的冲突。当然,这个形状节点构成了一个包含我的线的所有点的框架,在这种情况下,我的形状节点遍布我的视图。我的精灵节点始终检测到与该形状节点的碰撞。我想我应该画多个不同的ShapeNodes,这样每个节点都有自己的框架。但如果我这样做,我的线路就不相连了。有没有一些解决方案可以一个节点一个节点地画出这个节点,并且仍然得到一条漂亮的线。

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

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

  1. 创建第一个分段,然后将后续分段添加为子分段第一段
  2. 为整条线创建一个不可见的节点,并将其添加到整条线分段作为该节点的子节点
  3. 为每个分段创建物理实体,并将它们与CCD_ 1

最新更新