我打算用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)
我期望在节点(蓝色网格)中修复另一端。
是否有我遗漏的东西?或projectPoint
以其他方式工作吗?
编辑:似乎projectPoint
正在返回正确的值,但在创建路径path.addLine(to: s)
时,此点正在转移到不同的位置。
答案 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
的来源位于屏幕的左下角,而不是左上角。