您好我已经绘制了连接图形中节点的skshapenodes,用于我的视觉*表示。
for(int x=0; x<64; x++)
{
for(int y=0; y<48; y++)
{
PathFindingNode *node = [[gridToDraw objectAtIndex:x] objectAtIndex:y];
for(int i=0; i< node.connections.count; i++)
{
PathFindingNode *neighbor = [node.connections objectAtIndex:i];
SKShapeNode *line = [SKShapeNode node];
CGMutablePathRef pathToDraw = CGPathCreateMutable();
CGPathMoveToPoint(pathToDraw, NULL, node.position.x, node.position.y);
CGPathAddLineToPoint(pathToDraw, NULL, neighbor.position.x, neighbor.position.y);
line.path = pathToDraw;
line.lineWidth = 0.1f;
[line setStrokeColor:[UIColor blueColor]];
line.alpha = 0.1f;
[self addChild:line];
}
}
}
我的图表中有很多节点,这吸引了近22,000个形状。有没有办法可以在一次绘制调用中绘制这些形状,因为它们都是相同的,唯一的区别是它们的起点和终点位置。
如果我使用了一个纹理,它将被加载一次,我怎么能改变它的旋转来加入我的所有节点,如上所述。
此致
更新:
SKShapeNode *line = [SKShapeNode node];
CGMutablePathRef pathToDraw = CGPathCreateMutable();
for(int x=0; x<64; x++)
{
for(int y=0; y<48; y++)
{
PathFindingNode *node = [[gridToDraw objectAtIndex:x] objectAtIndex:y];
for(int i=0; i< node.connections.count; i++)
{
PathFindingNode *neighbor = [node.connections objectAtIndex:i];
CGPathMoveToPoint(pathToDraw, NULL, node.position.x, node.position.y);
CGPathAddLineToPoint(pathToDraw, NULL, neighbor.position.x, neighbor.position.y);
}
}
}
line.path = pathToDraw;
line.lineWidth = 0.1f;
[line setStrokeColor:[UIColor blueColor]];
line.alpha = 0.1f;
[self addChild:line];
我已经更新了我的代码,如上所示,这绘制了一个sknode,但它绘制了185次,为什么会这样?
答案 0 :(得分:4)
我昨天将在一个类似的问题上回答这个问题,但它已经消失了。
您可以使用SKShapeNode
创建一个路径并将所有内容绘制为一个CGPathAddPath
,以便合并路径。
以下是一个例子:
SKEffectNode *effectNode = [[SKEffectNode alloc]init];
SKShapeNode *shape = [[SKShapeNode alloc] init];
CGMutablePathRef myPath = CGPathCreateMutable();
CGPathAddArc(myPath, NULL, 0,0, 15, 0, M_PI*2, YES);
CGMutablePathRef pathTwo = CGPathCreateMutable();
CGPathAddArc(pathTwo, NULL, 50,0, 15, 0, M_PI*2, YES);
CGPathAddPath(myPath, NULL, pathTwo);
CGMutablePathRef pathThree = CGPathCreateMutable();
CGPathAddArc(pathThree, NULL, 100,0, 15, 0, M_PI*2, YES);
CGPathAddPath(myPath, NULL, pathThree);
shape.path = myPath;
[effectNode addChild:shape];
[self addChild:effectNode];
effectNode.shouldRasterize = YES; // if you don't rasterize it's horrifically slow.
这只是一个如何合并不同路径以创建一个SKShapeNode
的示例,其中包含您正在寻找的所有视觉元素。您需要将此概念应用于您的代码。
我将生成的SKShapeNode
添加到SKEffectNode
,以便我可以利用shouldRasterize
属性来缓存形状,否则您的帧率将非常糟糕。