大佬教程收集整理的这篇文章主要介绍了从SCNScene和overlaySKScene获取触摸事件的swift / scenekit问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import UIKit import SceneKit class GameViewController: UIViewController { var scnView:SCNView! var scnScene:SCNScene! var sprite: spritekitHUD! var cameraNode: SCNNode! var shape: SCNNode! override func viewDidLoad() { super.viewDidLoad() setupScene() } func setupScene() { scnView = self.view as! SCNView scnView.delegate = self scnView.allowsCameraControl = true scnScene = SCNScene(named: "art.scnassets/scene.scn") scnView.scene = scnScene sprite=spritekitHUD(size: self.view.bounds.size,game: self) scnView.overlaySKScene=sprite cameraNode = scnScene.rootNode.childNode(withName: "camera",recursively: truE)! shape=scnScene.rootNode.childNode(withName: "shape",recursively: truE) shape.name="ThreeDShape" } override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) { let touch = touches.first! let LOCATIOn = touch.LOCATIOn(in: scnView) let hitResults = scnView.hitTest(LOCATIOn,options: nil) if let result = hitResults.first { handleTouchFor(node: result.nodE) } } func handleTouchFor(node: SCNNodE) { if node.name == "ThreeDShape" { print("SCNNode Touched") } } }
这是我的Spritekit叠加场景
import Foundation import SpriteKit class spritekitHUD: SKScene{ var game:GameViewController! var shapeNode: SKSpriteNode! init(size: CGSize,game: GameViewController){ super.init(size: sizE) self.BACkgroundColor = UIColor.white let spriteSize = size.width/12 self.shapeNode= SKSpriteNode(imagenamed: "shapeNode") self.shapeNode.size = CGSize(width: spriteSize,height: spriteSizE) self.shapeNode.position = CGPoint(x: spriteSize + 8,y: spriteSize + 8) self.shapeNode.name="test" self.game=game self.addChild(self.pauseNodE) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func touchesEnded(_ touches: Set<UITouch>,with event: UIEvent?) { guard let touch=touches.first else{ return } let LOCATIOn=touch.LOCATIOn(in: self) if self.atPoint(LOCATIOn).name=="test" { print("Spritekit node pressed") } } }
所以有了这个,我可以成功获得通知,我的spritenode已经触及我的overlaySKScene,但我无法弄清楚如何获得我的SCNode被触摸的通知.如果你不能有2个touchesbegan函数,有没有人有任何想法如何我同时处理2d事件的3D事件?
谢谢你的帮助!!
在viewDidLoad中添加手势识别器:
// add a tap gesture recognizer let tapGesture = UITapGestureRecognizer(target: self,action: #SELEctor(handleTap(_:))) scnView.addGestureRecognizer(tapGesturE) func handleTap(_ gestureRecognize: UIGestureRecognizer) { // retrieve the SCNView let scnView = self.view as! SCNView // check what nodes are tapped let p = gestureRecognize.LOCATIOn(in: scnView) let hitResults = scnView.hitTest(p,options: [:]) // check that we clicked on at least one object if hitResults.count > 0 { // retrieved the first clicked object let result: AnyObject = hitResults[0] // result.node is the node that the user tapped on // perform any actions you want on it } }
以上是大佬教程为你收集整理的从SCNScene和overlaySKScene获取触摸事件的swift / scenekit问题全部内容,希望文章能够帮你解决从SCNScene和overlaySKScene获取触摸事件的swift / scenekit问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。