Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift和SpriteKit:如何用SKShapeNode实现非模糊循环计时器_Ios_Swift_Sprite Kit - Fatal编程技术网

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

Ios Swift和SpriteKit:如何用SKShapeNode实现非模糊循环计时器,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,下面的代码使用SKShapeNode实现了一个圆圈计时器,其中一个圆圈片段随着时间的流逝而消失 不幸的是,由于SKShapeNode的限制,计时器是模糊的 没有解决这个问题,而且是旧的,可能不再适用 1) 有没有一种方法可以在没有模糊线条的情况下使用SKShapeNode 2) 如果无法修复SKShapdeNode,那么实现类似循环计时器的替代方案是什么 let timer = SKShapeNode(circleOfRadius: CGFloat(50)) timer.fill

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

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

没有解决这个问题,而且是旧的,可能不再适用

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
}
let timer=SKShapeNode(圆环半径:CGFloat(50))
timer.fillColor=UIColor.red
timer.strokeColor=UIColor.clear
timer.lineWidth=0
timer.zRotation=CGFloat.pi/2
timer.path=self.circle(半径:CGFloat(50),百分比:CGFloat(90))
fileprivate func圆(半径:CGFloat,百分比:CGFloat)->CGPath{
//如果小于0,则进行调整
让百分比=百分比<0?0:百分比
//生成圆路径
let start=CGFloat(0)
让end=CGFloat.pi*2*百分比
设中心=CGPoint.zero
设bezierPath=UIBezierPath()
bezierPath.移动(到:中心)
bezierPath.addArc(带中心:中心,半径:半径,星形:起点,终点角度:终点,顺时针:真)
bezierPath.addLine(到:中心)
//返回路径
返回bezierPath.cgPath
}

着色器可能会实现您想要的功能,请查看


另外,根据AppleDocs的说法,SKShapeNode不应该在调试之外使用,因为在过去使用它们时遇到了一些问题

着色器可能会实现您想要的功能,请查看


另外,根据AppleDocs的说法,SKShapeNode不应该在调试之外使用,因为在过去使用它们时遇到了一些问题

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

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


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

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

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



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

设置一种笔划颜色,而不是带有线宽的“清晰”。@ElTomato您能给出答案吗?这似乎在初步测试中起作用!设置笔划颜色,而不是线条宽度为“清晰”。@ElTomato您能给出答案吗?这似乎在初步测试中起作用!什么是你声称SKShapeNodes仅用于调试目的的来源?情况绝对不是这样。它们应该节约使用,因为它们是资源密集型的。@Knight0fDragon我想我在这里读到了一些字里行间的东西-。“形状节点对于无法轻松分解为简单纹理精灵的内容非常有用。形状节点对于在游戏内容之上构建和显示调试信息也非常有用。但是,SKSpriteNode类提供了比此类更高的性能,因此请少用形状节点。”对我来说,这听起来很适合调试,但SKSpriteNode是一个更好的选择。当然,你不能用Spritode做所有相同的事情。这只是告诉你它对于调试来说是很好的,就像制作线框一样。有些情况下,SKShapeNode优于SKSpriteNode。例如,要在触摸屏幕时绘制曲线,只需更新SKShapeNode的路径。要使用SKSpriteNode制作,需要更新纹理您有什么来源声称SKSpriteNode仅用于调试目的?情况绝对不是这样。它们应该节约使用,因为它们是资源密集型的。@Knight0fDragon我想我在这里读到了一些字里行间的东西-。“形状节点对于无法轻松分解为简单纹理精灵的内容非常有用。形状节点对于在游戏内容之上构建和显示调试信息也非常有用。但是,SKSpriteNode类提供了比此类更高的性能,因此请少用形状节点。”对我来说,这听起来很适合调试,但SKSpriteNode是一个更好的选择。当然,你不能用Spritode做所有相同的事情。这只是告诉你它对于调试来说是很好的,就像制作线框一样。有些情况下,SKShapeNode优于SKSpriteNode。例如,要在触摸屏幕时绘制曲线,只需更新SKShapeNode的路径。要使用SKSpriteNode,需要更新纹理不幸的是
抗锯齿=false
不起作用,只有@ElTomato的答案起作用。
antialiased=false
对你有用吗?@Crashalot我不知道你在做什么来给你一个明确的答复。如果你使用上面的代码,只更改
antialiased=false
计时器对你来说是否很精确?首先,你发布的代码甚至不起作用,因为你有一条路径相交,这是SKShapeNode无法处理的。你是说百分之0.90吗?第二,场景大小是多少?因为你甚至不应该在如此高的分辨率下注意到任何模糊,所以你是对的,在发布问题时用固定值替换变量。百分比应为0.90。场景大小是设备大小,所以我们测试的iphone 7的375x667。不幸的是
抗锯齿=false
不起作用,只有@ElTomato的答案起作用。
antialiased=false
对你有用吗?@Crashalot我不知道你在做什么来给你一个明确的答复。如果你使用上面的代码,只更改
antialiased=false
计时器对你来说是否很精确?首先,你发布的代码甚至不起作用,因为你有一条路径相交,这是SKShapeNode无法处理的。你是说百分之0.90吗?第二,场景大小是多少?因为你甚至不应该