2015-10-16 102 views
0

我使用spritekit引擎工作,并面临以下问题。我需要在地图上绘制一条路线,为此,我创建一个点数组,并使用CGPathAddLines方法创建一个数组路径。一切工作正常,直到我试图建立在地图上两个遥远的点之间的路线。它的路径没有被渲染。长CGPath不会渲染

我开始处理这个问题。我用CGPathGetBoundingBox得到了我的路径的边界框,并且我注意到,每次绘制的路径宽度都不超过2005像素。我知道这听起来很奇怪,但在我看来确实如此。下面的代码的那部分,用于创建和显示的路径:

var pathToDraw = CGPathCreateMutable()  
let pathPoints = generatePathPoints() 
CGPathAddLines(pathToDraw, nil, pathPoints, pathPoints.count)  

var shapeNode = SKShapeNode() 
shapeNode.path = pathToDraw 
shapeNode.lineWidth = 10 
shapeNode.strokeColor = UIColor.blueColor() 

var effectNode = SKEffectNode() 
effectNode.addChild(shapeNode) 
mapNode.addChild(effectNode) 

generatePathPoints - 函数返回[CGPoint]

mapNode - 对象的SKSpriteNode类型

也许我做得不对或这是我不知道的CGPath的限制吗?

+1

“或者这是CGPath的限制”不是CGPath,但可能是SKShapeNode。众所周知,有许多不幸的限制,你可能已经击中其中之一。 – matt

+0

感谢您的回复,您能否介绍一些绘制无SKShapeNode路径的方法? –

+1

你可以将它绘制成一个图层或视图,如果这只是一个精灵套件的情况。这使它变得更加困难。我想你可以尝试将它绘制到图像上下文中,并将生成的图像用作纹理。 – matt

回答

0

如果它可以很好地用于短的路径,然后停止长的人的工作,我会假设(如@马特所做的那样),这是因为SKShapeNode的限制。

您是否尝试过创建多个SKShapeNode更短的路径,并把它们全部另一SKNode里面?有了这个解决方案,你可以与父SKNode(全小SKShapeNodes)的工作,就好像它是你的大SKShapeNode但(我希望)所有的短路径将正确渲染...

+0

感谢您的回复,但这不符合我的要求,我需要一种连续的方式,许多SKShapeNodes对性能不利 –

+0

您可以通过将一个'SKShapeNode'在之前的'SKShapeNode'结束的地方。不错的表现是这个解决方案的一个坏的副作用,是的,但是至少它可以帮助你在找到另一个解决方案时完成你的游戏...... :)所以,我仍然相信这可能是一个好的(临时的)解决方案。 – RoberRM

+0

我已经试过这个选项。除了性能还有问题。在创建两个不同的'SKShapeNode'的行之间没有平滑的过渡。它看起来像这样:http://imagehost.spark-media.ru/i4/70CE9B5B-D927-0A0C-BD65-A92F429F9221.png有必要向连接点添加一个单独的节点来解决问题。但如果它是一条连续路径,所有转换都会自动平滑。它会看起来像这样:http://imagehost.spark-media.ru/i4/21605B3C-75B1-CCEC-1D3D-2A87DFB26441.png –