簡體   English   中英

在SceneKit中聲明的func hitTest導致Playground崩潰

[英]func hitTest declared in SceneKit causes crash in Playground

我在操場上創建了一個場景,並使用hitTest(func hitTest(_ point:CGPoint,options:[SCNHitTestOption:Any]?= nil)-> [SCNHitTestResult])函數來確定是否已觸摸其中一個節點,但這會導致僅在觸摸節點時,模擬器才會在操場上崩潰。 使用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
        }

    }

}

這在Playground中的運行速度非常,非常,非常慢……但是也許還有其他事情在發生。 無論如何,如果您用它替換func panGesture(sender: UIPanGestureRecognizer) ,它至少應該讓您在Playground中運行它而不會崩潰。

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
        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM