Swift 如何使用UIBezierPath()和SKNode的Zposition?
我有一个UIView,在那里我用UIBezierPath()画线,在那里我有一个SKSHapeNode子对象。有时,图形与节点重叠。在这种情况下,我希望节点位于图形的上方。但是,即使节点有更大的Zpos,图形也是上节点 当我想画一条线时,我使用这个脚本:Swift 如何使用UIBezierPath()和SKNode的Zposition?,swift,uibezierpath,sknode,zposition,Swift,Uibezierpath,Sknode,Zposition,我有一个UIView,在那里我用UIBezierPath()画线,在那里我有一个SKSHapeNode子对象。有时,图形与节点重叠。在这种情况下,我希望节点位于图形的上方。但是,即使节点有更大的Zpos,图形也是上节点 当我想画一条线时,我使用这个脚本: private func addLine(fromPoint start: CGPoint, toPoint end:CGPoint) { let line = CAShapeLayer() let linePath = UIB
private func addLine(fromPoint start: CGPoint, toPoint end:CGPoint) {
let line = CAShapeLayer()
let linePath = UIBezierPath()
linePath.move(to: start)
linePath.addLine(to: end)
line.zPosition = 80
line.path = linePath.cgPath
line.strokeColor = UIColor.black.cgColor
line.lineWidth = 5.0
line.lineJoin = CAShapeLayerLineJoin.round
self.view!.layer.addSublayer(line)
}
我将这个脚本用于SKSHapeNodes:
private func drawBase(map : Int) {
for i in 0...maps.xMaps[map].count - 1 {
let team = maps.mapTeam[map][i]
let weight = CGFloat(game!.baseWeight[i])
let base = SKShapeNode(rectOf: CGSize(width: weight, height: weight))
base.zPosition = 90
base.position = CGPoint(x: maps.xMaps[map][i], y: maps.yMaps[map][i])
if team == 0 {
base.fillColor = .blue
} else if team == 1 {
base.fillColor = .red
} else if team == 2 {
base.fillColor = .green
} else if team == 3 {
base.fillColor = .purple
}
mapEntity.append(base)
self.addChild(base)
}
}
我在这里调用函数:
func drawMap(map : Int){
drawRoad(map: map)
drawBase(map: map)
}
DrawRoad是绘制线条的功能:
private func drawRoad(map : Int) {
for i in 0...maps.xRoad[map].count - 1 {
let start = CGPoint(x: maps.xRoad[map][i][0], y: self.frame.height - maps.yRoad[map][i][0])
let end = CGPoint(x: maps.xRoad[map][i][1], y: self.frame.height - maps.yRoad[map][i][1])
addLine(fromPoint: start, toPoint: end)
}
}
正如您所见,我在添加SKShapeNode之前画了一条线,但它不起作用…您能给我们看看drawRoad的代码吗?只是一个提示:忘记ZP定位,我假设您负责添加层的顺序。最后添加那个层,你想先添加它。是的,这不是很有趣,它只使用第一个函数画线,但我把它添加到了问题中