使用SpriteKit场景编辑器绘制圆圈和其他形状?

时间:2016-07-12 06:05:12

标签: xcode sprite-kit skscene

在线教程提到使用SpriteKit场景编辑器创建圆形和其他形状。其中一个例子就是:https://www.raywenderlich.com/118225/introduction-sprite-kit-scene-editor

但是,对象库中唯一可用的形状节点类型是方形。

如何使用对象库创建除正方形之外的其他形状?

2 个答案:

答案 0 :(得分:0)

  

SKShapeNode 对象绘制由Core Graphics路径定义的形状。

     

图形路径是直线和曲线的集合   可以定义打开或关闭的子路径。您可以指定单独的   路径的填充和描边部分的渲染行为。   每个部分都可以使用纯色或纹理渲染;如果   你需要渲染更复杂的效果,你也可以使用   自定义着色器。

     

Shape节点对于无法轻松分解的内容非常有用   成为简单的纹理精灵。形状节点也非常有用   在游戏之上构建和显示调试信息   内容。但是,SKSpriteNode类提供更高的性能   比这个类,所以请谨慎使用形状节点。

     

从路径创建形状节点显示了如何创建形状的示例   形状节点。该示例创建一个带有蓝色内部和a的圆   白色轮廓。创建路径并将其附加到形状节点   路径属性。

您可以向Apple官方guide

找到更多详细信息

这是源中实际可用的init方法:

/* Create a Shape Node using a CGPathRef, optionally centered at the Node's origin. */
    @available(iOS 8.0, *)
    public convenience init(path: CGPath)
    @available(iOS 8.0, *)
    public convenience init(path: CGPath, centered: Bool)

    /* Create a Shape Node representing a Rect. */
    @available(iOS 8.0, *)
    public convenience init(rect: CGRect)

    /* Create a Shape Node representing a rect centered at the Node's origin. */
    @available(iOS 8.0, *)
    public convenience init(rectOfSize size: CGSize)

    /* Create a Shape Node representing a rounded rect with a corner radius */
    @available(iOS 8.0, *)
    public convenience init(rect: CGRect, cornerRadius: CGFloat)

    /* Create a Shape Node representing a rounded rect with a corner radius centered at the Node's origin. */
    @available(iOS 8.0, *)
    public convenience init(rectOfSize size: CGSize, cornerRadius: CGFloat)

    /* Create a Shape Node representing an circle centered at the Node's origin. */
    @available(iOS 8.0, *)
    public convenience init(circleOfRadius radius: CGFloat)

    /* Create a Shape Node representing an Ellipse inscribed within a Rect */
    @available(iOS 8.0, *)
    public convenience init(ellipseInRect rect: CGRect)

    /* Create a Shape Node representing an Ellipse inscribed within a Rect centered at the Node's origin. */
    @available(iOS 8.0, *)
    public convenience init(ellipseOfSize size: CGSize)

    /* Create a Shape Node representing an a series of Points interpreted as line segments */
    @available(iOS 8.0, *)
    public convenience init(points: UnsafeMutablePointer<CGPoint>, count numPoints: Int)

    /* Create a Shape Node representing a smoothed spline that passes through a series of Points */
    @available(iOS 8.0, *)
    public convenience init(splinePoints points: UnsafeMutablePointer<CGPoint>, count numPoints: Int)

如您所见,您可以使用例如自定义CGPath创建非唯一正方形而且还可以创建不规则多边形。

典型的例子如下:

let shape = SKShapeNode()
shape.path = UIBezierPath(roundedRect: CGRect(x: -128, y: -128, width: 256, height: 256), cornerRadius: 64).CGPath
shape.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
shape.fillColor = UIColor.redColor()
shape.strokeColor = UIColor.blueColor()
shape.lineWidth = 10
addChild(shape)

<强> P.S 即可。: 可能会在开发期间由SKShapeNode引起内存中的一些错误,但没有什么会阻止您测试,创建和发布游戏,市场上的许多游戏都会毫无问题地使用SKShapeNode,您必须简单在不滥用代码的情况下更加小心。

答案 1 :(得分:0)

截至目前,square是您唯一的选择。也许在下一个版本中它们会允许更多的形状,但是现在,我会避免使用SKShapeNode,因为它们非常错误

来源:XCode场景编辑器,只有选项是正方形,没有一个选项卡允许更改或被子类化