- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有两条弧形成一个圆(SKCropNode
),每条都有不同的颜色。我知道我可以给整个圆一个 circleOfRadius
,但我想知道是否可以只给一个圆弧一个物理体来适应圆弧的形状。
非常感谢帮助。
最佳答案
您可能希望避免使用 SKCropNode
来构建弧线。来自 Apple 的文档,
Use clipping and effect nodes sparingly. Both are very powerful, but can be expensive, especially when nested together within the node tree.
或者,您可以构建一个弧形核心图形路径,然后从该路径创建一个形状节点。然后,您可以使用 CG 路径创建物理体。
构建弧形路径,
扩展CGPath
来构造圆弧路径不是必须的,但通常使用起来更方便。扩展后,可以从代码中的任何位置调用新的类方法。这是一个例子:
extension CGPath {
static func arcWithWidth(arcWidth:CGFloat, start:CGFloat, end:CGFloat, radius:CGFloat, clockwise:Bool) -> CGPath {
// The radius parameter specifies the middle of the arc; adjust this as needed
let innerRadius:CGFloat = radius - arcWidth / 2.0
let outerRadius:CGFloat = radius + arcWidth / 2.0
// Note the arc is upside down because CGPath uses UIKit coordinates
let path = UIBezierPath()
// Add inner ring.
path.addArcWithCenter(CGPointZero, radius: innerRadius, startAngle: start, endAngle: end, clockwise: clockwise)
let x = outerRadius * cos(end)
let y = outerRadius * sin(end)
// Connect the inner to the outer ring
path.addLineToPoint(CGPointMake(x, y))
// Add outer ring
path.addArcWithCenter(CGPointZero, radius: outerRadius, startAngle: end, endAngle: start, clockwise: !clockwise)
path.closePath()
return path.CGPath
}
}
使用扩展,您可以创建顶部和底部弧线:
// Top arc
var path = CGPath.arcWithWidth(20, start:0, end: CGFloat(M_PI), radius: 100, clockwise: true)
let topArc = SKShapeNode(path: path)
topArc.position = view.center
topArc.fillColor = SKColor.redColor()
topArc.strokeColor = SKColor.clearColor()
// Add a physics body to the top half
topArc.physicsBody = SKPhysicsBody(polygonFromPath: path)
topArc.physicsBody?.affectedByGravity = false
addChild(topArc)
// Bottom arc
path = CGPath.arcWithWidth(20, start:0, end: CGFloat(M_PI), radius: 100, clockwise: false)
let bottomArc = SKShapeNode(path: path)
bottomArc.position = view.center
bottomArc.fillColor = SKColor.blueColor()
bottomArc.strokeColor = SKColor.clearColor()
addChild(bottomArc)
关于swift - 如何将物理体赋予弧线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161824/
我正在用 Canvas 绘制一个非传统的响钟。时间由秒环、秒针、分钟环和小时环表示。我正在使用 webkit/mozRequestAnimationFrame 在适当的时间绘制。我想修改第二个环以快速
问题:我在 Canvas 上画一艘宇宙飞船。将鼠标悬停在其 x/y 上时,我在 Canvas 上绘制一条弧线,指示星舰武器 Angular 和范围(考虑星舰当前的巴林/朝向)。目前确定的 Angula
我正在使用 css 制作一个“饼形楔形”,方法是制作一个圆圈,将其剪掉一半,然后变换旋转另一个剪裁矩形,以便仅显示 25 度的弧形。这很好用;一个明确定义了六个这样的饼图的例子是 here . 然而,
我正在尝试研究 Page 65 of LDD3 中提到的 __copy_to_user() 和 __copy_from_user() 内联函数. 我可以看到 __copy_to_user() func
我是一名优秀的程序员,十分优秀!