问题描述
我正在制作一个 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 (将#修改为@)