你能告诉我我的代码有什么问题吗?我正在处理日期这是另一种方法吗?

问题描述

我正在制作一个 AR 应用程序,我将节点放置在整个房间,直到它们达到 25 个,同时玩家必须销毁这些对象。我想跟踪从创建第一个节点到最后一个节点被销毁所经过的时间。我正在使用 Date() 来了解这两个事件之间的时间间隔,但我不断收到该错误。我不知道我的做法是否正确,如果有更好的方法,我将非常感激,或者如果需要有所不同,请告诉我。预先感谢您的帮助:)

import SpriteKit
import ARKit
import GameplayKit

class Scene: SKScene {
    
    let remainingTargetLabel = SKLabelNode()
    var timer : Timer?
    var targetsCreated = 0
    var text = "left"
    var targetCount = 0 {
        didSet {
            remainingTargetLabel.text = "\(targetCount) "
        }
    }
    var startingTime : Date?
    var endingTime : Date?
    
    override func didMove(to view: SKView) {
        remainingTargetLabel.fontSize = 30
        remainingTargetLabel.fontName = "Helvetica Neue"
        remainingTargetLabel.color = .white
        remainingTargetLabel.position = CGPoint(x: 0,y: view.frame.midY-50)
        addChild(remainingTargetLabel)
        
        targetCount = 0
        timer = Timer.scheduledTimer(withTimeInterval: 3.0,repeats: true,block: { (timer) in
                                        self.createTarget()
                                    }
        )
    }
    
    override func update(_ currentTime: TimeInterval) {

    }
    
    override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
        guard let touch = touches.first else {return}
        let location = touch.location(in: self)
        let node = nodes(at: location)
        
        if let sprite = node.first {
        let scaleOut = SKAction.scale(to: 3,duration: 0.4)
        let fadeOut = SKAction.fadeOut(withDuration: 0.4)
            let remove = SKAction.removeFromParent()
        let group = SKAction.group([scaleOut,fadeOut])
        let sequence = SKAction.sequence([group,remove])
            sprite.run(sequence)
            targetCount -= 1
            if targetsCreated == 1 {
                startingTime = Date()
            }
            if targetsCreated == 25 && targetCount == 0 {
                endingTime = Date()
                gameOver()
            }
    }
}

    func createTarget() {
        if targetsCreated == 25 {
            timer?.invalidate()
            timer = nil
            return
        }
        targetsCreated += 1
        targetCount += 1
        
        guard let sceneView = self.view as? ARSKView else { return }
        
        let random = GKRandomSource.sharedRandom()
        
       
        let rotateX = simd_float4x4(SCNMatrix4MakeRotation(2.0 * Float.pi * random.nextUniform(),1,0))
        
        let rotateY = simd_float4x4(SCNMatrix4MakeRotation(2.0 * Float.pi * random.nextUniform(),0))
        
        let rotation = simd_mul(rotateX,rotateY)
        
        var translation = matrix_identity_float4x4
        translation.columns.3.z = -1.5

        let anchor = aranchor(transform: finalTransformation)
        
        
        sceneView.session.add(anchor: anchor)
    }
    
   func gameOver () {
        remainingTargetLabel.removeFromParent()
        
        let gameOverImage = SKSpriteNode(imageNamed: "gameover")
        addChild(gameOverImage)
    let tiMetaken = endingTime?.timeIntervalSince(startingTime!)
        let tiMetakenLabel = SKLabelNode(text: "Time taken: \(String(tiMetaken!))")
        tiMetakenLabel.fontName = "Helvetica Neue"
        tiMetakenLabel.fontSize = 50
        tiMetakenLabel.color = .white
        tiMetakenLabel.position = CGPoint(x: 0,y: -(view?.frame.midY)!+50)
       addChild(tiMetakenLabel)
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)