Swift和SpriteKit:如何使用SKShapeNode实现非模糊循环计时器

时间:2018-07-13 04:05:05

标签: ios swift sprite-kit

下面的代码用SKShapeNode实现了一个循环计时器,随着时间的流逝,其中的一小片圆圈消失了。

不幸的是,由于SKShapeNode的限制,计时器很模糊。

Answers like this并未解决该问题,并且该问题已过时,可能不再适用。

1)有没有一种方法可以使用没有这种模糊线的SKShapeNode?

2)如果没有办法修复SKShapdeNode,实现类似的循环计时器的替代方法是什么?

    let timer = SKShapeNode(circleOfRadius: CGFloat(50))
    timer.fillColor = UIColor.red
    timer.strokeColor = UIColor.clear
    timer.lineWidth = 0
    timer.zRotation = CGFloat.pi / 2

    timer.path = self.circle(radius: CGFloat(50), percent: CGFloat(90))

fileprivate func circle(radius: CGFloat, percent: CGFloat) -> CGPath {
    // Adjust <percent> if less than 0
    let percent = percent < 0 ? 0 : percent

    // Generate circle path
    let start = CGFloat(0)
    let end = CGFloat.pi * 2 * percent
    let center = CGPoint.zero
    let bezierPath = UIBezierPath()
    bezierPath.move(to: center)
    bezierPath.addArc(withCenter:center, radius: radius, startAngle: start, endAngle: end, clockwise: true)
    bezierPath.addLine(to: center)

    // Return path
    return bezierPath.cgPath
}

2 个答案:

答案 0 :(得分:1)

着色器可能会完成您想要的操作,请查看http://battleofbrothers.com/sirryan/understanding-shaders-in-spritekit/

此外,根据AppleDocs的建议,SKShapeNode不应该在调试之外使用,过去使用它们时遇到了一些问题。

答案 1 :(得分:1)

@ElTomato提到设置笔触颜色和线条宽度,这将有助于掩盖模糊性。

更好的解决方案可能是使用isAntialiased = false

关闭抗锯齿功能

这当然取决于您的图形偏好。