我想在我的Sprite Kit游戏中画一条虚线,我可以使用SKShapeNode节点来绘制普通的线条,如下所示:
UIBezierPath *_path=[UIBezierPath bezierPath];
//1
CGPoint point1 = CGPointMake(100,100);
CGPoint point2 = CGPointMake(150,150);
[_path moveToPoint:point1];
[_path addLineToPoint:point2];
//2
SKShapeNode *line = [SKShapeNode node];
line.path = _path.CGPath;
我尝试为UIBezierPath设置虚线模式,像这样:
// adding this code at location 1 or 2 above but no effect
CGFloat dashes[] = {6, 2};
[_path setLineDash:dashes count:2 phase:0];
但虚线模式未被应用。
我还尝试直接从UIBezierpath.CGPath属性创建虚线副本,如下所示:
CGFloat dashes[] = {6, 2};
CGPathRef aCGPath= CGPathCreateCopyByDashingPath(_path.CGPath,NULL,0,dashes,2);
line.path = aCGPath;
但同时也是一样的。
如果有人能够解释一下问题,并告诉我如何通过将虚线cgpath应用于skshapenode来在两个点之间绘制虚线,我会非常感激。
编辑:我知道对于这个简单的例子,我可以将这两个点之间的距离分成小的固定距离,然后通过bezeirpath移动和绘制虚线,但考虑到手指滑动生成的自由路径,重新绘制具有固定长度点的路径并绘制虚线非常复杂且低效。我想知道是否有一种方法可以将虚线图案应用于路径,并使skshapenode使用它,这就是我的问题。
SKShapeNode
,它将在每一帧绘制路径。如果您按照上述描述使用SKEffectNode
,它将缓存路径的位图版本,因此渲染速度更快(仅适用于不经常更改的路径)。 - Binary Pulsar