gpt4 book ai didi

ios - 一局中有多个skshapenode?

转载 作者:行者123 更新时间:2023-12-01 17:54:26 35 4
gpt4 key购买 nike

嗨,我为我的视觉a *表示绘制了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次,为什么呢?

最佳答案

我昨天打算就类似的问题回答这个问题,但是它消失了。

您可以创建一条路径,并使用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属性来缓存形状,否则您的帧速率将很糟糕。

关于ios - 一局中有多个skshapenode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20807545/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com