Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SceneKit中宣布的func hitTest导致游乐场发生碰撞_Ios_Swift_Scenekit_Swift Playground - Fatal编程技术网

Ios SceneKit中宣布的func hitTest导致游乐场发生碰撞

Ios SceneKit中宣布的func hitTest导致游乐场发生碰撞,ios,swift,scenekit,swift-playground,Ios,Swift,Scenekit,Swift Playground,我在游乐场中创建了一个场景,并使用hitTest(func-hitTest(upoint:CGPoint,options:[scnhitestoption:Any]?=nil)->[scnhitestresult])函数来确定其中一个节点是否已被触摸,但它仅在触摸节点时才会导致游乐场中模拟器崩溃。使用xcode的iOS项目上的相同代码不会出现这种情况 func panGesture(sender: UIPanGestureRecognizer) { sender.view le

我在游乐场中创建了一个场景,并使用hitTest(func-hitTest(upoint:CGPoint,options:[scnhitestoption:Any]?=nil)->[scnhitestresult])函数来确定其中一个节点是否已被触摸,但它仅在触摸节点时才会导致游乐场中模拟器崩溃。使用xcode的iOS项目上的相同代码不会出现这种情况

func panGesture(sender: UIPanGestureRecognizer) {
    sender.view

    let translation = sender.translation(in: sender.view!)

    var newAngleX = (Float)(translation.y)*(Float)(M_PI)/180.0
    newAngleX += currentXAngle
    var newAngleY = (Float)(translation.x)*(Float)(M_PI)/180.0
    newAngleY += currentYAngle

    if (sender.numberOfTouches>0){

        var point = sender.location(in: self)

        print(point)

        let hit = self.hitTest(point, options: nil)

        let node = hit.first?.node

        node?.eulerAngles.x = newAngleX
        node?.eulerAngles.y = newAngleY

        if(sender.state == UIGestureRecognizerState.ended) {
            currentXAngle = newAngleX
            currentYAngle = newAngleY
        }

    }

}

这在操场上跑得真的,真的,真的很慢。。。但也许还有别的事情。无论如何,如果你用这个替换你的
func-panGesture(发送者:UIPangestureRecognitizer)
,它至少可以让你在操场上运行而不会崩溃

func panGesture(sender: UIPanGestureRecognizer) {
    sender.view

    let translation = sender.translation(in: sender.view!)

    var newAngleX = (Float)(translation.y)*(Float)(M_PI)/180.0
    newAngleX += currentXAngle
    var newAngleY = (Float)(translation.x)*(Float)(M_PI)/180.0
    newAngleY += currentYAngle

    let point = sender.location(in: self)
    print(point)

    // important
    guard let hit = self.hitTest(point, options: nil) as? [SCNHitTestResult] else { return }

    // and, don't go in here if hit.count == 0, because it won't have a .first
    if (sender.numberOfTouches > 0 && hit.count > 0){

        let node = hit.first?.node

        node?.eulerAngles.x = newAngleX
        node?.eulerAngles.y = newAngleY

        if(sender.state == UIGestureRecognizerState.ended) {
            currentXAngle = newAngleX
            currentYAngle = newAngleY
        }

    }

}

有一堆吗?没有。。Xcode上新游戏项目的示例代码在游乐场上报告了sceneKit,这会产生相同的问题发布整个游乐场文件?或者至少足以证明这个问题?@DonMag[