【问题标题】:A long CGPath does not render长 CGPath 不渲染
【发布时间】:2015-10-16 14:20:08
【问题描述】:

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

我开始处理这个问题。我用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 的限制?

【问题讨论】:

  • "或者这是对 CGPath 的限制" 不是 CGPath,但可能是 SKShapeNode。众所周知,有许多不幸的限制,您可能已经达到了其中之一。
  • 谢谢你的回复,你能告诉一些没有SKShapeNode的绘制路径的方法吗?
  • 如果这不是精灵套件的情况,您可以将其绘制到图层或视图中。这使它变得更加困难。我想您可以尝试将其绘制到图像上下文中并将生成的图像用作纹理。
  • 再次感谢,我会努力的

标签: ios swift sprite-kit cgpath


【解决方案1】:

如果它适用于短路径,然后停止适用于长路径,我会假设(就像 @matt 所做的那样)这是因为 SKShapeNode 的限制。

您是否尝试过创建多个具有较短路径的 SKShapeNode 并将它们全部放在另一个 SKNode 中?使用此解决方案,您可以使用父 SKNode(充满较小的 SKShapeNode),就好像它是您更大的 SKShapeNode 但(我希望)所有较短的路径都能正确呈现......

【讨论】:

  • 感谢您的回复,但这不是我的要求,我需要一种方法来保持连续性,并且许多 SKShapeNodes 对性能不利
  • 您可以通过在前一个SKShapeNode 结束的位置放置一个SKShapeNode 来使它们连续。糟糕的性能是这个解决方案的一个不好的副作用,是的,但至少它可以帮助你在找到另一个解决方案的同时完成你的游戏...... :) 所以,我仍然相信这可能是一个很好的(临时)解决方案。
  • 我已经尝试过这个选项。而且除了性能还有问题。在两个不同SKShapeNode 创建的行之间没有平滑过渡。它看起来像这样:imagehost.spark-media.ru/i4/… 需要在连接点添加一个单独的节点才能解决问题。但是如果是一条连续的路径,那么所有的过渡都是自动平滑的。它看起来像这样:imagehost.spark-media.ru/i4/…
  • 好吧,那么不要从前一点开始,而是从前两点开始,然后我认为它们应该看起来正确连接......无论如何,如果你尝试过这个并且没有找到它一个合适的解决方案,那么我想不出别的办法,只能等待 Apple 解决您的问题(我知道,这对您没有任何帮助,抱歉)。也许其他人有其他解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2012-11-10
  • 1970-01-01
  • 2020-03-31
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多