带有颜色的资产

时间:2017-10-29 12:47:29

标签: ios swift graphics colors sprite-kit

我有一个变量var image = SKSpriteNode(imageNamed: "image"),它是一个大纲。我想用彩色填充图像,但不知道必要的代码。有人能够提供解决方案吗?

2 个答案:

答案 0 :(得分:1)

使用SKSpriteNode或图像无法执行此操作。您需要做的是使用UIBezierPathCGPath创建大纲路径,然后创建一个用于填充路径区域的上下文。

然后你可以返回生成的图像并将其附加到精灵。

func fillInPath(path: CGPath, color: UIColor) -> UIImage?
{
    let size = path.boundingBoxOfPath()
    UIGraphicsBeginImageContext( size)
    guard let context = UIGraphicsGetCurrentContext()
    else
    {
        UIGraphicsEndImageContext()
        return nil
    } 
    context.addPath(path) // the path of your outline
    context.clip()
    context.setFillColor(color.cgColor)
    context.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
    let image = UIImage(cgImage:context.makeImage()!)
    UIGraphicsEndImageContext()

    return image            
}

答案 1 :(得分:1)

这是另一种方法,为了方便起见,它包含在SpriteNode扩展名中:

extension SKSpriteNode {

  func fromFilledPath(path: CGPath, color: SKColor) -> SKSpriteNode {
    let shape = SKShapeNode(path: path)
    shape.fillColor = color
    return SKSpriteNode(texture: SKView().texture(from:shape))
  }
}

class GameScene: SKScene {

  let myPathSprite = SKSpriteNode.fromFilledPath(~~~~)

}