【发布时间】:2015-03-16 04:05:49
【问题描述】:
我有一个 SCNScene 用于我正在构建的 3D 游戏。我使用 SCNScene.overlaySKScene 在这个场景上放置了一个 HUD。
为了在我的 3D 场景中接收点击,我使用了手势识别器和 hitTest,这工作正常。
我正在尝试确定我现在在水龙头上添加到 HUD SKScene 的 SKSpriteNodes。这不适用于手势识别器。
查看 WWDC 2014 Banana 示例后,我认为我在使用替代 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 找到 nil 结果。
我由 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 节点上触摸,那么即使默认为 userInteractionEnabled=false,它也会返回 hudRoot 节点。
现在我已经用 Apple 自己的 Bananas 示例检查了我的实现,我没有任何剩余的想法。
【问题讨论】:
-
你得到答案了吗?你试过这个吗:forum.yourwebapp.mobi/…
标签: ios swift sprite-kit scenekit