gpt4 book ai didi

swift - 圆形特定角 - SKShapeNode

转载 作者:行者123 更新时间:2023-12-03 09:30:05 26 4
gpt4 key购买 nike

我有一个 SKShapeNode,如果满足特定条件,它需要将它的每个角都变圆。阅读下面链接提供的答案,这似乎很容易,因为我会简单地使用 |= 来圆角需要舍入的加角(4x if 语句)。

How to write a generic UIRectCorner function?

然而,这是行不通的!当我使用下面的代码时,我收到错误消息“Binart operator '|=' 不能应用于两个 'UIRectCorner' 操作数”

var corners: UIRectCorner = UIRectCorner(rawValue: 0) | UIRectCorner(rawValue: 1)

或者
var corners: UIRectCorner = UIRectCorner(rawValue: 0)
corners |= UIRectCorner(rawValue: 1)

我一定是做错了什么,但我不知道是什么?任何帮助将非常感激。

最佳答案

我写了一个非常方便的扩展,我在我所有的 SpriteKit 游戏中都大量使用它。它采用现有的 SKShapeNode 并复制其所有相关属性,然后删除并使用您指定要圆角的任何角创建一个新属性。注意:如果形状节点有任何子节点,则不应使用它,因为它们不会在新创建中持续存在。因此,在向其中添加任何子项之前,请始终使用此方法。

shapeNode.roundCorners(topLeft:true,topRight: true,bottomLeft:false,bottomRight:false,radius:20,parent:self)


extension SKShapeNode {
func roundCorners(topLeft:Bool,topRight:Bool,bottomLeft:Bool,bottomRight:Bool,radius: CGFloat,parent: SKNode){
let newNode = SKShapeNode(rect: self.frame)
newNode.fillColor = self.fillColor
newNode.lineWidth = self.lineWidth
newNode.position = self.position
newNode.name = self.name
newNode.fillColor = self.fillColor
newNode.strokeColor = self.strokeColor
newNode.fillTexture = self.fillTexture
self.removeFromParent()
parent.addChild(newNode)
var corners = UIRectCorner()
if topLeft { corners = corners.union(.bottomLeft) }
if topRight { corners = corners.union(.bottomRight) }
if bottomLeft { corners = corners.union(.topLeft) }
if bottomRight { corners = corners.union(.topRight) }
newNode.path = UIBezierPath(roundedRect: CGRect(x: -(newNode.frame.width / 2),y:-(newNode.frame.height / 2),width: newNode.frame.width, height: newNode.frame.height),byRoundingCorners: corners, cornerRadii: CGSize(width:radius,height:radius)).cgPath
}
}

关于swift - 圆形特定角 - SKShapeNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com