【问题标题】:SKShapeNode .strokeColor to look same as .fillColor when change node.alphaSKShapeNode .strokeColor 在更改 node.alpha 时看起来与 .fillColor 相同
【发布时间】:2015-11-03 18:03:09
【问题描述】:

当我更改 SKShapeNode 的 .alpha 时,它的 stroke 显示自己好像节点的 .strokeColor 比它的 .fillColor 更亮。将 .lineWidth 设置为 0 会取消笔画提供的抗锯齿平滑度。将.strokeColor 设置为SKColor.clearColor 也是如此。

问题

在更改node.alpha 时,使描边看起来与填充相同的最佳方法是什么,同时保留边缘的抗锯齿平滑度?

【问题讨论】:

  • 你检查过这个吗? stackoverflow.com/a/26640893/4078517
  • @Darvydas 谢谢,这行得通。这个想法是像这样stackoverflow.com/questions/10071756/… 获得.strokeColor 的HSBA,然后将alpha 更改为期望的
  • 我只是发布了一个链接,而不是一个答案:)。您可以发布答案并标记它:)
  • @Darvydas 我在这种方式上遇到了另一个问题。由于节点的填充覆盖了节点的笔画,笔画的 alpha 必须设置为 0,这样它实际上就不会被看到。但这取消了抗锯齿。所以实际上它不起作用。我想唯一的方法是将 SKShapeNode 转换为 SKSpriteNode。

标签: ios objective-c swift sprite-kit skshapenode


【解决方案1】:

虽然可以通过获取其“颜色”HSBA 并将具有不同alpha 的新颜色重新分配给stroke 来直接设置节点strokealpha(有关更多信息,请查看this answer ),因为节点的fill 覆盖了节点的stroke,所以stroke's alpha 必须设置为0,这样它实际上就不会被看到。但这会取消抗锯齿。

看来,在没有看到stroke 的情况下实现平滑节点边缘的唯一方法是将SKShapeNode 转换为SKSpriteNode 并将sprite.alpha 重置为所需的值。

这是 Swift 中的代码 sn-p

let sprite = SKSpriteNode(texture: self.view!.textureFromNode(shapeNode))

没那么糟糕,因为根据Apple's docs

正在渲染的节点不需要出现在视图的 呈现的场景。

但是,您仍然必须有权访问发生转换的 view

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多