Несколько скшапенод в одном розыгрыше?
Привет, я нарисовал скшапеноды, соединяющие узлы в моем графике для моего визуального представления.
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];
Я обновил свой код, чтобы он выглядел так, как показано выше, он рисует один скнод, но он рисует 185 раз, почему так?
1 ответ
Я собирался ответить на это вчера на похожий вопрос, но он исчез.
Вы можете создать один путь и нарисовать все как один 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
свойство кэшировать фигуры, иначе ваша частота кадров будет ужасной.