我有一个SCNScene,用于构建3D游戏。我使用SCNScene.overlaySKScene将HUD放在这个场景上。
为了在我的3D场景中接收点击事件,我使用手势识别器和hitTest,这很好用。
现在,我试图确定我在点击时添加到HUD SKScene的SKSpriteNodes。但手势识别器无法实现此功能。
在查看了WWDC 2014的香蕉示例后,我认为我在使用替代touchesBegan方法方面并没有做什么不同(如下所示)。
我随后向这个场景添加了一个根SKNode。
为了在我的3D场景中接收点击事件,我使用手势识别器和hitTest,这很好用。
现在,我试图确定我在点击时添加到HUD SKScene的SKSpriteNodes。但手势识别器无法实现此功能。
在查看了WWDC 2014的香蕉示例后,我认为我在使用替代touchesBegan方法方面并没有做什么不同(如下所示)。
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
println("touchesBegan")
let scnView = self.view as SCNView
let skScene = scnView.overlaySKScene
let touch: AnyObject? = touches.anyObject()
let p = touch?.locationInNode(skScene)
let touchedNode = skScene.nodeAtPoint(p!)
println("touchedNode \(touchedNode.name)")
super.touchesBegan(touches, withEvent: event)
}
第二个println找到了一个空的结果。
我使用HUD创建:
scnView.overlaySKScene = SKScene(fileNamed: "HUDScene.sks")
scnView.overlaySKScene.name = "HUD"
scnView.overlaySKScene.delegate = self
我随后向这个场景添加了一个根SKNode。
var hudRoot = SKNode()
把userInteractionEnabled设置为true的SKSpriteNodes添加到hudRoot中。
当调用touchesBegan时,触摸SKSpriteNodes时返回nil。有趣的是,如果我在SKSpriteNodes之外触摸并且没有触摸任何3D节点,则即使hudRoot默认为userInteractionEnabled=false,它也会返回hudRoot节点。
现在我已经使用了苹果自己的Bananas示例检查了我的实现,但是我没有剩余的想法。