ios xcode swift sprite-kit scenekit

ios - App Crashs en Touch de la pantalla Scenekit con overlayskscene Xcode Swift



sprite-kit (1)

Oye, ¿cuál es la mejor forma de reconocer el tacto para un HUD en un juego de escenas en 3D en Overlayskscene? porque tengo un botón llamado "AButton" pero cada vez que toco el botón o la pantalla el juego se bloquea después de horas de búsqueda supongo que el problema es que el toque en el kit de escena no se lleva bien. Pero entonces, ¿cómo lo hago para que cuando un usuario toque un botón en el HUD no bloquee el sistema y realmente funcione? ¿Puedes mirar mi código y reescribirlo? ¿uso los toques begin o do i us hit test o algo más (nunca he usado hit test antes)?

handleTap:]: selector no reconocido enviado a la instancia 0x14d547710 ''*** Primer lanzamiento de la pila de llamadas: (0x1868042d8 0x1980300e4

Código:

import iAd import UIKit import GameKit import SceneKit import StoreKit import SpriteKit import QuartzCore import Foundation import AVFoundation import AudioToolbox //============================================================ class GameViewController: UIViewController, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate{ let FieldScene = SCNScene(named: "art.scnassets/TesingCampusField.dae")! let GuyScene = SCNScene(named: "art.scnassets/Guy.dae")! //-------------------HUD-SetUp------------------------------------------------------- let overlayScene = SKScene(size: CGSizeMake(100, 100)) override func viewDidLoad() { super.viewDidLoad() let scnView = self.view as! SCNView scnView.overlaySKScene = overlayScene scnView.backgroundColor = UIColor.whiteColor() scnView.scene = FieldScene scnView.delegate = self scnView.overlaySKScene!.delegate = self scnView.overlaySKScene!.anchorPoint = CGPointMake(0, 0) scnView.overlaySKScene!.physicsWorld.contactDelegate = self scnView.overlaySKScene!.physicsWorld.gravity = CGVectorMake(0.0, 0.0) scnView.allowsCameraControl = false scnView.showsStatistics = false let Guy1: SCNNode = GuyScene.rootNode.childNodeWithName("Bob_014", recursively: true)! FieldScene.rootNode.addChildNode(Guy1) ButtonA.size = CGSize(width: 6, height: 9) ButtonA.anchorPoint = CGPointMake(-13.3, -0.5) ButtonA.zPosition = 0 overlayScene.addChild(ButtonA) let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") scnView.addGestureRecognizer(tapGesture) //-------------------------- let cameraNode = SCNNode() cameraNode.camera = SCNCamera() FieldScene.rootNode.addChildNode(cameraNode) cameraNode.position = SCNVector3(x: 0, y: 5, z: 15) //----------------------------------------------- let lightNode = SCNNode() lightNode.light = SCNLight() lightNode.light!.type = SCNLightTypeOmni lightNode.position = SCNVector3(x: 0, y: 10, z: 10) FieldScene.rootNode.addChildNode(lightNode) //----------------------------------------------- let ambientLightNode = SCNNode() ambientLightNode.light = SCNLight() ambientLightNode.light!.type = SCNLightTypeAmbient ambientLightNode.light!.color = UIColor.darkGrayColor() FieldScene.rootNode.addChildNode(ambientLightNode) //---------------------------------------------- } func AButtonPressed() { let AButtonPressed = SKTexture(imageNamed: "GreenAButtonPressed") let OrignalButtonA = SKTexture(imageNamed:"GreenAButton") let AButtonPressedAnimation = SKAction.animateWithTextures([AButtonPressed, OrignalButtonA], timePerFrame: 0.2) let RunAButtonPressedAnimation = SKAction.repeatAction(AButtonPressedAnimation, count: 1) ButtonA.runAction(RunAButtonPressedAnimation) print("finishedpressing") } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { /* Called when a touch begins */ for touch: AnyObject in touches { let location1 = touch.locationInNode(self.overlayScene) if self.overlayScene.nodeAtPoint(location1) == self.ButtonA { AButtonPressed() print("AButtonPressed") } }


su reconocedor de gestos está configurado para llamar al método handleTap: cuando el usuario toca la vista, pero no define ese método.

func handleTap(gestureRecognizer: UITapGestureRecognizer) { // do something }

Si desea usar touchesBegan directamente, entonces no necesita el reconocedor de gestos.