使用CGMutablePath创建路径会创建行到错误的CGPoint

时间:2018-03-23 05:56:31

标签: ios swift sprite-kit scenekit arkit

我打算用2D中的箭头在屏幕上显示AR对象的信息。所以我使用projectPoint来获取屏幕中对象的相应位置。我有这个函数返回节点转换为2D的位置和CGPoint以显示信息文本。

func getPoint(sceneView: ARSCNView) -> (CGPoint, CGPoint){
    let projectedPoint = sceneView.projectPoint(node.worldPosition)
    return (point, CGPoint(x: CGFloat(projectedPoint.x), y: CGFloat(projectedPoint.y)) )
}

这是使用SpriteKit绘制线条:

let (f,s) = parts[3].getPoint(sceneView: sceneView) 
line.removeFromParent()
let path = CGMutablePath()
path.move(to: f)
path.addLine(to: s)
line = SKShapeNode(path: path)
spriteScene.addChild(line)

This is what i get

我期望在节点(蓝色网格)中修复另一端。
是否有我遗漏的东西?或projectPoint以其他方式工作吗?

编辑:似乎projectPoint正在返回正确的值,但在创建路径path.addLine(to: s)时,此点正在转移到不同的位置。

1 个答案:

答案 0 :(得分:1)

path.addLine(to: s)在这里已经扭转了y所以这就是诀窍

let frame = self.sceneView.frame
let sInversed = CGPoint(x: from.x, y: frame.height - s.y)

path.addLine(to: sInversed)

此处SKScene的来源位于屏幕的左下角,而不是左上角。